gpt4 book ai didi

PHP 静态类返回引用

转载 作者:可可西里 更新时间:2023-11-01 00:23:06 26 4
gpt4 key购买 nike

我有一个带有静态方法的类。静态方法返回私有(private)静态 stdClass 对象。

myclass::get() // returns stdClass object
myclass::get()->name // name is hardcoded into the class

我将如何更改名称的值,例如:

myclass::get()->name = 'bob';

设置好了吗?

我尝试像这样返回对象:

return &self::$static_object;

但这会引发语法错误。

我能做什么?

编辑发布的代码以进行澄清

final class config {

private static $configs = array();

public static function get($config_name) {

if (isset($configs[$config_name])) {

return self::$configs[$config_name];
}

$file = __get_file_exists(M_CONFIGS . $config_name, 'conf.');

if ($file) {

$config = self::__scope_include($file);

if (!is_array($config) && !$config instanceof stdClass) {
/*
*
*
* FIX
*
*
*
*/
die('ERROR config.php');
}

return self::$configs[$config_name] = self::__to_object($config);
}
}

private static function __scope_include($file) {

return include $file;
}

private static function __to_object($config) {

$config = (object) $config;

foreach ($config as &$value) {

if (is_array($value)) {

$value = self::__to_object($value);
}
}

return $config;
}
}

echo config::get('people')->name; //dave
config::get('people')->name = 'bob';
echo config::get('people')->name; // should be bob, is dave

最佳答案

get() 方法中通过引用返回应该可以解决问题:

public static function &get() {
return self::$static_object;
}

但是,我认为您应该重新审视您的设计,因为这种编码非常不受欢迎,并且会导致维护和可测试性方面的问题。

关于PHP 静态类返回引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13325803/

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