我怎么能用PHP做到这一点
$myDBClass->users()->limit(5);//output you limited users to 5 $myDBClass->comments()->limit(3);//output you limited comments to 3
我的意思是嵌套方法或嵌套类(我不知道!)所以当我将limit方法作为用户的子进程调用时,它会知道我从"users"方法调用它 - 或者 - 当我调用时限制方法 - 或类! - 来自评论它也知道.
PHP类可能的结构是什么?
这个问题的原因是因为我在自己的数据库类上工作所以我可以很容易地使用这样的东西
$DB->comments()->id(" > 3")->limit(10);
生成sql代码"select*from comments where id> 3 limit 10"谢谢
让方法使用所描述的方法返回对象,并获得所需的内容.
因此,只要$DB
具有comments()
-method 的对象,该部分就是有效的.如果comments()
返回具有id()
-method 的对象,则该部分也是有效的.然后,id()
需要返回具有limit()
-method 的对象.
在您的特定情况下,您可能希望执行以下操作:
class DB { public function comments() { // do preparations that make the object select the "comments"-table... return $this; } public function id($string) { // handle this too... return $this; } public function limit($int) { // also this return $this; } public function execute() { $success = try_to_execute_accumulated_db_commands(); return $success; } } $DB = new DB(); $DB->comments()->id(" > 3")->limit(10);
在我的示例中,每个方法(此处也未描述)都将返回对象本身,以便命令可以链接在一起.在完成数据库查询的构建时,您实际上通过调用execute()
(在我的情况下)将返回一个表示数据库执行成功的布尔值来评估查询.
用户nickohm建议将其称为流畅的界面.我必须承认,这对我来说是一个新术语,但这可能比我的用法更能说明我的知识.("我只是写代码,你知道......")
注意: $this
是一个指向当前活动对象的"魔术"变量.顾名思义,它只返回自己作为方法的返回值.
对此的标准约定是在每个方法调用结束时返回$ this的实例.因此,当返回给调用者时,我们只是引用另一个方法调用.
class Foo { public function do_something() { return $this; } public function do_something_else() { return $this; } } $foo = new Foo(); $foo->do_something()->do_something_else();