在下面这个类中,我想使用类似于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);
此代码无效并且有问题。如何解决这个类问题?
答案 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);