php如何根据类的字符串名设置静态属性

//我的类
class MyClass{
    public static $value;
}

//我的函数
function setValue(string $class,$value){
    //这里代码要如何写才能把$value赋值给MyClass::$value呢?
}

//调用方法
setValue('MyClass','测试值');

如上
我希望把类名和值传入setValue函数时能赋值MyClass类的静态属性$value,应该如何做?

世界最好语言的追随者
最佳答案
// 我的类
class MyClass
{
    public static $value;
}

// 我的函数
function setValue(string $class, $value)
{
    $class::$value = $value;
}

// 调用方法
var_dump(MyClass::$value); // NULL
setValue('MyClass', '测试值');
var_dump(MyClass::$value); // string(9) "测试值"
2年前 评论
renxiaotu (楼主) 2年前
lddtime (作者) 2年前
michonnehsu 2年前
讨论数量: 9
// 我的类
class MyClass
{
    public static $value;
}

// 我的函数
function setValue(string $class, $value)
{
    $class::$value = $value;
}

// 调用方法
var_dump(MyClass::$value); // NULL
setValue('MyClass', '测试值');
var_dump(MyClass::$value); // string(9) "测试值"
2年前 评论
renxiaotu (楼主) 2年前
lddtime (作者) 2年前
michonnehsu 2年前

从好的实践来说,不应该把对象的属性暴露成 public ,可以在对象上添加一个 getter/setter 方法来做这个事情

2年前 评论
renxiaotu (楼主) 2年前

@lddtime 我正在做一个统一管理缓存的功能,我计划统一配置key以防止冲突,如下

//统一配置key,因为key前缀冲突的话编辑器会高亮
//在ItemConfig::init里我会把对应的前缀写入各缓存类的静态属性里
ItemConfig::init([
    'test'=> ItemTest::class,
    'user'=> UserTest::class,
    'product'=> Product::class,
]);
2年前 评论

@renxiaotu 在每个类里直接定义个 key 或 key 前缀是否可行

const CACHE_KEY = 'xxx';
// or
const CACHE_KEY_PREFIX = 'xxx_';

ItemConfig::init([
    ItemTest::CACHE_KEY,
    UserTest::CACHE_KEY,
    Product::CACHE_KEY,
]);
2年前 评论
renxiaotu (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!