Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:具有新self()的方法链?_Php_Oop_Methods_Chaining - Fatal编程技术网

PHP:具有新self()的方法链?

PHP:具有新self()的方法链?,php,oop,methods,chaining,Php,Oop,Methods,Chaining,我在一个方法中创建了一个对象,我想在同一类的另一个方法中进一步处理它 我这样尝试过,但是$obj没有传递给方法2(): 有没有办法做到这一点 我找到了这个线程,但仍然不清楚这是否可能。如果我没有误解您的意图,如果您没有将第二个方法设置为静态,您可以返回一个对象,它将作为$this在链式调用中传递 class SomeClass { public $id = 0; public static function one($id) { $obj = new

我在一个方法中创建了一个对象,我想在同一类的另一个方法中进一步处理它

我这样尝试过,但是$obj没有传递给方法2():

有没有办法做到这一点


我找到了这个线程,但仍然不清楚这是否可能。

如果我没有误解您的意图,如果您没有将第二个方法设置为静态,您可以返回一个对象,它将作为$this在链式调用中传递

class SomeClass {

    public $id = 0;

    public static function one($id)
    {
        $obj = new self();  // Create and return new object
        $obj->id = $id;
        return $obj;
    }

    public function two()
    {
        $this->id = 3;      // The new object is $this here
        return $this;
    }
}

$obj = SomeClass::one(5)->two();

如果我没有误解您的意图,如果您没有使第二个方法成为静态的,您可以返回一个对象,它将作为$this在链式调用中传递

class SomeClass {

    public $id = 0;

    public static function one($id)
    {
        $obj = new self();  // Create and return new object
        $obj->id = $id;
        return $obj;
    }

    public function two()
    {
        $this->id = 3;      // The new object is $this here
        return $this;
    }
}

$obj = SomeClass::one(5)->two();

如果我没有误解您的意图,如果您没有使第二个方法成为静态的,您可以返回一个对象,它将作为$this在链式调用中传递

class SomeClass {

    public $id = 0;

    public static function one($id)
    {
        $obj = new self();  // Create and return new object
        $obj->id = $id;
        return $obj;
    }

    public function two()
    {
        $this->id = 3;      // The new object is $this here
        return $this;
    }
}

$obj = SomeClass::one(5)->two();

如果我没有误解您的意图,如果您没有使第二个方法成为静态的,您可以返回一个对象,它将作为$this在链式调用中传递

class SomeClass {

    public $id = 0;

    public static function one($id)
    {
        $obj = new self();  // Create and return new object
        $obj->id = $id;
        return $obj;
    }

    public function two()
    {
        $this->id = 3;      // The new object is $this here
        return $this;
    }
}

$obj = SomeClass::one(5)->two();

two
是一种静态方法。您试图在一个实例上调用它,而静态方法按定义在特定实例上不起作用


使方法不是静态的,并操作
$this
而不是
$obj

two
是一种静态方法。您试图在一个实例上调用它,而静态方法按定义在特定实例上不起作用


使方法不是静态的,并操作
$this
而不是
$obj

two
是一种静态方法。您试图在一个实例上调用它,而静态方法按定义在特定实例上不起作用


使方法不是静态的,并操作
$this
而不是
$obj

two
是一种静态方法。您试图在一个实例上调用它,而静态方法按定义在特定实例上不起作用


使方法不是静态的,并操纵
$this
而不是
$obj

方法链接仅在使用setter时才有意义。 结合PHPDoc,大多数IDE(如NetBeans)将再次支持代码完成/自动完成功能

p.s请注意,方法链接可以让您在出现错误时有更多的机会,例如PHP致命错误:调用成员函数。。。。在…中的非对象上。。。。当混合到更多的班级时,返回

class Example {

    protected $var = null;


    public function __construct() {

    }

    public function __destruct() {
        unset($this->var); // explicit memory clearing 
    }

    /**
     * @return \Example
     */
    public static function create() {
        return new self();
    }

    /**
     * @return \Example
     */    
    public static function getInstance() {
        return self::create();
    }

    /**
     * @return \Example
     */    
    public static function newInstance() {
        return self::create();
    }


    /**
     * 
     * @param mixed $var
     * @return \Example
     */
    public function setThing1($var) {
        $this->var = $var;
        return $this;
    }

    /**
     * 
     * @param mixed $var
     * @return \Example
     */
    public function setThing2($var) {
        $this->var = $var;
        return $this;
    }    
}

Example::create()->setThing1(1)->setThing2('2');

方法链接只有在使用setter时才有意义。 结合PHPDoc,大多数IDE(如NetBeans)将再次支持代码完成/自动完成功能

p.s请注意,方法链接可以让您在出现错误时有更多的机会,例如PHP致命错误:调用成员函数。。。。在…中的非对象上。。。。当混合到更多的班级时,返回

class Example {

    protected $var = null;


    public function __construct() {

    }

    public function __destruct() {
        unset($this->var); // explicit memory clearing 
    }

    /**
     * @return \Example
     */
    public static function create() {
        return new self();
    }

    /**
     * @return \Example
     */    
    public static function getInstance() {
        return self::create();
    }

    /**
     * @return \Example
     */    
    public static function newInstance() {
        return self::create();
    }


    /**
     * 
     * @param mixed $var
     * @return \Example
     */
    public function setThing1($var) {
        $this->var = $var;
        return $this;
    }

    /**
     * 
     * @param mixed $var
     * @return \Example
     */
    public function setThing2($var) {
        $this->var = $var;
        return $this;
    }    
}

Example::create()->setThing1(1)->setThing2('2');

方法链接只有在使用setter时才有意义。 结合PHPDoc,大多数IDE(如NetBeans)将再次支持代码完成/自动完成功能

p.s请注意,方法链接可以让您在出现错误时有更多的机会,例如PHP致命错误:调用成员函数。。。。在…中的非对象上。。。。当混合到更多的班级时,返回

class Example {

    protected $var = null;


    public function __construct() {

    }

    public function __destruct() {
        unset($this->var); // explicit memory clearing 
    }

    /**
     * @return \Example
     */
    public static function create() {
        return new self();
    }

    /**
     * @return \Example
     */    
    public static function getInstance() {
        return self::create();
    }

    /**
     * @return \Example
     */    
    public static function newInstance() {
        return self::create();
    }


    /**
     * 
     * @param mixed $var
     * @return \Example
     */
    public function setThing1($var) {
        $this->var = $var;
        return $this;
    }

    /**
     * 
     * @param mixed $var
     * @return \Example
     */
    public function setThing2($var) {
        $this->var = $var;
        return $this;
    }    
}

Example::create()->setThing1(1)->setThing2('2');

方法链接只有在使用setter时才有意义。 结合PHPDoc,大多数IDE(如NetBeans)将再次支持代码完成/自动完成功能

p.s请注意,方法链接可以让您在出现错误时有更多的机会,例如PHP致命错误:调用成员函数。。。。在…中的非对象上。。。。当混合到更多的班级时,返回

class Example {

    protected $var = null;


    public function __construct() {

    }

    public function __destruct() {
        unset($this->var); // explicit memory clearing 
    }

    /**
     * @return \Example
     */
    public static function create() {
        return new self();
    }

    /**
     * @return \Example
     */    
    public static function getInstance() {
        return self::create();
    }

    /**
     * @return \Example
     */    
    public static function newInstance() {
        return self::create();
    }


    /**
     * 
     * @param mixed $var
     * @return \Example
     */
    public function setThing1($var) {
        $this->var = $var;
        return $this;
    }

    /**
     * 
     * @param mixed $var
     * @return \Example
     */
    public function setThing2($var) {
        $this->var = $var;
        return $this;
    }    
}

Example::create()->setThing1(1)->setThing2('2');


太好了,这正是我要找的!非常感谢。第二个静态函数是错误的,我只是复制了第一个方法,但不小心忘记了(我更正了它)。我不知道我可以在链式调用中将$obj称为$this。太好了,这正是我要找的!非常感谢。第二个静态函数是错误的,我只是复制了第一个方法,但不小心忘记了(我更正了它)。我不知道我可以在链式调用中将$obj称为$this。太好了,这正是我要找的!非常感谢。第二个静态函数是错误的,我只是复制了第一个方法,但不小心忘记了(我更正了它)。我不知道我可以在链式调用中将$obj称为$this。太好了,这正是我要找的!非常感谢。第二个静态函数是错误的,我只是复制了第一个方法,但不小心忘记了(我更正了它)。我不知道我可以在链式通话中把$obj称为$this。谢谢你的解释,希望我能接受两个答案:D我一得到15次就做:D谢谢你的解释,希望我能接受两个答案:D我一得到15次就做:D谢谢你的解释,希望我能接受两个答案:D我将在15次重复后立即接受:D谢谢你的解释,希望我能接受两个答案:D我将在15次重复后立即接受:D“方法链接仅在使用setter时才有意义”不是真的。非常感谢你提供了这个示例,但我一直在寻找Joachim和meagar解释的内容。“方法链接只有在使用setter时才有意义”不是真的。非常感谢您提供了这个示例,但我一直在寻找Joachim和meagar解释的内容。“方法链接只有在使用setter时才有意义”不是真的。非常感谢您提供了这个示例,但我一直在寻找Joachim和meagar解释的内容。“方法链接只有在使用setter时才有意义”不是真的。非常感谢您提供了这个示例,但我一直在寻找Joachim和meagar解释的内容。