PHP でのチェーン操作のポイントは、操作完了後に $this を返すことです;
1. __call メソッドを使用せずにチェーン操作を実装します
<?php class Sql{ private $sql=array("from"=>"", "where"=>"", "order"=>"", "limit"=>""); public function from($tableName) { $this->sql["from"]="FROM ".$tableName; return $this; } public function where($_where='1=1') { $this->sql["where"]="WHERE ".$_where; return $this; } public function order($_order='id DESC') { $this->sql["order"]="ORDER BY ".$_order; return $this; } public function limit($_limit='30') { $this->sql["limit"]="LIMIT 0,".$_limit; return $this; } public function select($_select='*') { return "SELECT ".$_select." ".(implode(" ",$this->sql)); } } $sql =new Sql(); echo $sql->from("testTable")->where("id=1")->order("id DESC")->limit(10)->select(); //输出 SELECT * FROM testTable WHERE id=1 ORDER BY id DESC LIMIT 0,10 ?>
2. __call メソッドを使用してチェーン操作を実装する
__call() は、オブジェクトがアクセスできないメソッドを呼び出すときにトリガーされるため、クラスの動的メソッドの作成と PHP のメソッドの再利用を実現できます。 .loading 関数ですが、実際には糖衣構文です (__construct() メソッドと同様)。
<?php class String { public $value; public function __construct($str=null) { $this->value = $str; } public function __call($name, $args) { $this->value = call_user_func($name, $this->value, $args[0]); return $this; } public function strlen() { return strlen($this->value); } } $str = new String('01389'); echo $str->trim('0')->strlen(); // 输出结果为 4;trim('0')后$str为"1389" ?>
関連する推奨事項:
PHP ビデオ チュートリアル: https://www.php.cn/course/list/29/type/2.html
以上がPHPチェーン操作の実装の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。