在PHP中链接新对象实例
我们有以下链接:在PHP中链接新对象实例,php,Php,我们有以下链接: $obj = new obj(); $obj->setname($params1)->setcolor($params2); 有没有一种方法可以在一行上进行相同的链接,而不创建虚拟函数 我想跳过构造器本身在新行的部分。我想构造对象并在同一条线上开始链接。大概是这样的: $obj = new obj()->setname($params1)->setcolor($params2); $obj = (new obj())->setname($par
$obj = new obj();
$obj->setname($params1)->setcolor($params2);
有没有一种方法可以在一行上进行相同的链接,而不创建虚拟函数
我想跳过构造器本身在新行的部分。我想构造对象并在同一条线上开始链接。大概是这样的:
$obj = new obj()->setname($params1)->setcolor($params2);
$obj = (new obj())->setname($params1)->setcolor($params2);
function _i($i) { return $i; }
_i(new Obj)->doThis($param)->doThat($param2);
如果始终在函数中返回对象本身,则应该是可能的
function setname($param) {
// set the name etc..
return $this;
}
当然是。simpt
在每个函数的末尾返回此
,以返回对象,以便下一个链接函数可以使用它
<?php
class A
{
public __constructor()
{ .... }
public function B($params)
{
//Processing
return this;
}
public function C($params)
{
//Processing
return this;
}
public function D($params)
{
//Processing
}
}
$O = new A();
$O->B($params)->C($params)->D($params); //Will work because B and C return this
$O->B($params)->D($params)->C($params); //WILL NOT work because D doesn't return this
?>
自PHP 5.4以来,已添加实例化时的类成员访问权限,因此您可以这样做:
$obj = new obj()->setname($params1)->setcolor($params2);
$obj = (new obj())->setname($params1)->setcolor($params2);
function _i($i) { return $i; }
_i(new Obj)->doThis($param)->doThat($param2);
在以前的版本中,像您一样,我讨厌您必须在一行上实例化对象,然后在另一行上开始使用它,因此我有一个全局函数\u I()
,如下所示:
$obj = new obj()->setname($params1)->setcolor($params2);
$obj = (new obj())->setname($params1)->setcolor($params2);
function _i($i) { return $i; }
_i(new Obj)->doThis($param)->doThat($param2);
我是这样使用它的:
$obj = new obj()->setname($params1)->setcolor($params2);
$obj = (new obj())->setname($params1)->setcolor($params2);
function _i($i) { return $i; }
_i(new Obj)->doThis($param)->doThat($param2);
有些人会觉得它很难看,但PHP缺乏语言表达能力,所以它适合我:)我使用类的静态函数
class a{
static public function gets($args){
return new self($args);
}
public function do_other(){
}
}
a::gets()->do_other();
通常有更多的静态方法用于不同的用途您也可以使用它来确保只有正确的对象被用作参数
function instance(sdtClass $instance) { return $instance }
或者作为使用类名的静态方法
class CustomClass{
static public function gets(CustomClass $obj){
return $obj;
}
}
您还可以从Singleton模式使用此技术(不使用Singleton模式):
我已经完成了。我想把这两行合并成一行:{new obj()}->setname($params1)->setcolor($params2);但是我不知道怎么做。我相信你也可以在构造函数的末尾做返回这个,来达到这个效果。我的PHP已经生锈了,它的工作原理就是这样。也许你在别的地方出错了?收到错误消息了吗?我想跳过构造器本身位于新行的部分。我想构造对象并在同一行上开始链接。请检查我对daddz的注释回答:)将函数添加到类本身:静态函数实例(){return new obj();}obj::instance()->chain()。。。现在一切正常