PHP简单的链类方法没有创建对象

时间:2014-07-28 09:40:42

标签: php

在下面这个类中,我想使用类似于static方法的类,并且不使用父类创建新对象来使用类方法。

例如:

<?php
class Permission
{
    protected $permission = false;
    protected $id = 0;

    public static function __construct()
    {
        return new static;
    }
    public function user( $id )
    {
        $this->id = $id;
    }
    public function check()
    {
        $this->permission = true;
    }
    public function item( $item )
    {
        return $item;
    }
}
$bar = Permission::user(100)->item("HELLO");
print_r($bar);

此代码无效并且有问题。如何解决这个类问题?

3 个答案:

答案 0 :(得分:2)

这不起作用,因为用户方法不是静态的,尝试更改这两种方法,这是生成对象的好方法

public function __construct($id)
{
    $this->id = $id;
}
public static function user( $id )
{
    return new static($id);
}

答案 1 :(得分:0)

你可以通过在方法结束时返回$ this来链接“动态”类中的方法(记住,你有一个静态的)。

class A {

public function someMethod()
{
  // some code
  return $this
}
public function otherMethod()
{
  // some code
  return $this
}

$a = new A();
$a->someMethod()->otherMethod();

}

答案 2 :(得分:0)

我建议你使用单身模式,比如

class Permission
{
    static protected $permission = false;
    static protected $id = 0;

    private static $_instance = null;

    private function __construct () { }

    public static function getInstance()
    {
        if (self::$_instance === null) {
            self::$_instance = new self;
        }

        return self::$_instance;
    }

    public static function user( $userId )
    {
        self::$id = $userId;
        return self::$_instance;
    }
    public static function check()
    {
        self::$permission = true;
        return self::$_instance;
    }

    public static function item( $item )
    {
        return $item;
    }
}
$bar = Permission::getInstance()->user(100)->item("HELLO");
print_r($bar);