gpt4 book ai didi

PHP:知道实例化是否来自静态方法?

转载 作者:行者123 更新时间:2023-12-02 07:42:40 24 4
gpt4 key购买 nike

假设我有这样一个类:

class Person
{
private $value;

public function __construct()
{
$this->value = 'new';
}

public static function find( $ident )
{
$person = new Person();
$person->value = 'old';

return $person;
}
}

如果我从静态 find 函数调用,我如何才能阻止构造函数触发,或以某种方式转移它使其不执行自身的某些部分?

我的示例的上下文与我的真实代码的上下文相同,只是真实代码的开销非常大,以至于只执行了一个函数。 (很多对象可以同时存在,但是如果静态函数调用__construct方法,那么就会有太多的开销和加载时间)。

两者都需要有 public 访问器。

最佳答案

你可以传递一个 bool 值给你的构造函数来告诉它是否应该执行

class Person
{
private $value;

public function __construct($exec)
{
if(!$exec)
return;
$this->value = 'new';
echo $this->value; //testing
}

public static function find( $ident )
{
$person = new Person(false);
$person->value = 'old';

return $person;
}
}

//$p = new Person(true);
$p = Person::find(0);

使用静态变量更新

class Person
{
private $value;
protected static $exec1 = true;

public function __construct()
{
if(!self::$exec1)
return;
$this->value = 'new';
echo $this->value;
}

public static function find( $ident )
{
self::$exec1 = false;
$person = new Person();
self::$exec1 = true;
$person->value = 'old';

return $person;
}
}

$p = Person::find(0);

关于PHP:知道实例化是否来自静态方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9419133/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com