2010-03-06 2 views
6

Hai. Ich machte diese einfache String-Klasse und fragte mich, ob es einen natürlicheren Weg gab.Wie man eine natürliche String-Klasse in PHP

class Str{ 
    function __construct($str){ 
     $this->value = $str; 
     $this->length = strlen($str); 
     .. 
    } 

    function __toString(){ 
     return $this->value; 
    } 
    .. 
} 

so jetzt muss ich es wie folgt verwendet werden:

$str = new Str('hello kitty'); 
echo $str; 

Aber das sieht nicht sehr ‚natürlich‘ mit den Klammern. Also habe ich mich gefragt, ob sowas oder ähnliches möglich ist.

$str = new Str 'hello kitty'; # I dont believe this is possible although this is preferred. 

$str = new Str; # get rid of the construct param. 
$str = 'value here'; #instead of resetting, set 'value here' to Str::$value?? 

In dem zweiten Verfahren gibt es eine Weise, die ich möglicherweise diese Variable bing wieder gesetzt fangen konnte und stattdessen es von Reseting, setzen Sie sich auf Str :: Wert $? Ich habe nachgedacht und das nächste, was ich erreichen konnte, ist die Destruction-Methode. aber es gab keine Möglichkeit zu wissen, wie es zerstört wurde. Ist das möglich oder verschwende ich meine Zeit?

+21

Sie Ihre Zeit verschwenden. :-) –

+1

Was Sie tun, ist im Grunde eine Wrapper-Klasse.Ein Unterschied, den Sie in Java finden, ist Autoboxing (eine Zeichenkette, die automatisch als Zeichenkette betrachtet wird) und das ist eine Sprachfunktion. Was Sie hier versuchen, ist die Änderung der Syntax. –

Antwort

8

Da PHP lose typisiert ist, gibt es keine natürliche String-Klasse, weil die natürliche Art und Weise Saiten verwenden ist, na ja, indem man sie einfach mit. Doch ab PHP5.3 gibt es eine Erweiterung in der SPL, die stark typisierte Skalare bietet:

jedoch bedenken, dass diese Erweiterung markiert Versuchs- und Änderungen vorbehalten. Ab sofort ist es auch nicht unter Windows verfügbar.

Sie könnten auch versuchen wollen https://github.com/nikic/scalar_objects

Diese Erweiterung implementiert die Möglichkeit, eine Klasse zu registrieren, dass das Verfahren bis zu einem gewissen primitiven Griffen nennt (string, Array, ...). Als solches erlaubt es die Implementierung von APIs wie $ str-> length().

+0

sieht aus wie ich av muss dann warten .. – shxfee

0

Ich habe Angst, Ihnen zu sagen, dass Sie kein Glück mit beiden von beiden haben werden.
$str = new Str 'hello kitty'; endet in schwerwiegender Fehler und obwohl die zweite Methode gültig ist, tut es nicht was Sie beabsichtigen, sondern eine native Zeichenfolge neu zuweisen.

Darf ich fragen, warum Sie einen Wrapper über einen nativen Typ haben möchten?

+0

yeah .. ich hatte kein Glück mit beiden, daher die Frage. Ich bin daran interessiert, meine Skripte ein wenig stark typisiert zu machen. Eine Zeichenkette sollte eine Zeichenkette und keine Ganzzahl auf halbem Weg in das Skript sein. – shxfee

2
  1. Es ist unmöglich, Funktionen in PHP ohne Klammern aufzurufen.
  2. Ihre nächste Methode wird den Verweis auf Zeichenfolge ändern.

Warum es nicht für Sie selbstverständlich aus? In Java ist es genauso.

können Sie finden diese nützlich:

php-string

Verwandte Themen