C# のように文字列を操作するクラスを作成します。
ここにあります:
class String {
private $origin_string = null;
private $result_string = null;
function __construct($string)
{
$this->origin_string = $string;
$this->result_string = $this->origin_string;
}
public function Trim()
{
$this->result_string = Trim($this->result_string);
return $this->result_string;
}
public function StartWith($string)
{
return (substr($this->result_string, 0, strlen($string)) === $string);
}
public function EndWith($string)
{
$endlen = strlen($string);
$strlen = strlen($this->result_string);
return (substr($this->result_string, $strlen - $endlen, $endlen) === $string);
}
public function Contains($string) {
return (strpos($this->result_string, $string) !== false);
}
public function Replace($search, $string) {
$this->result_string = str_replace($search, $string, $this->result_string);
return $this->result_string;
}
public function __invoke($string) {
$this->origin_string = $string;
$this->result_string = $this->origin_string;
return $this;
}
public function __toString()
{
return $this->result_string;
}
public static function Override($string)
{
return new self($string);
}
}
使用中で:
$s = new String("My custom string");
if ($s->StartWith("My"))
$s->Replace("custom", "super");
print $s; // "My super string"
オブジェクトからテキストを正しく印刷するには、魔法のメソッド __toString() を使用します。
質問: メソッド、逆の __toString はありますか? つまり、次のように記述できます。
$s = "new text";
そして、行はオブジェクト内の変数に割り当てられます。
($s - 上記の例では、既存のオブジェクト「文字列」。)
メソッド __set の類似物で、オブジェクト内の変数ではなく、オブジェクトにのみ関係します。
__invokeを使用していますが、それは私が望むものではありません。