首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >关于PHP中的任意类属性

关于PHP中的任意类属性
EN

Stack Overflow用户
提问于 2019-06-04 20:09:43
回答 2查看 138关注 0票数 0

我刚刚了解到,您可以设置类的任何属性(只要它没有显式声明为私有属性)。例如:

代码语言:javascript
复制
class Test {}
$test = new Test;
$test->randomthing = 'Hello world';
var_export($test);

可以很好地设置$test对象的randomthing属性。

我正在尝试找出这种行为的名称,以及是否有可能消除/禁用它(以最小化代码中的错误),因为按照目前的情况,我可能会键入我想要的属性,而不会及时注意到。

理想情况下,我希望拥有:

代码语言:javascript
复制
class User {
    protected $name;
}

然后我希望能够设置$user->name = '',但不能设置$user->randomthing = ''。这第二个调用理想情况下会抛出一个异常或其他东西。

我试图通过查找“动态属性”来猜测这种约定,但这似乎是指通过变量中的值引用属性的双美元语法之类的东西。

那么,你把这种行为叫做什么呢?我在哪里可以了解到更多关于控制它(或禁用它)的信息?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-06-04 20:14:43

它没有特殊的名称或任何东西,它只是将一个属性分配给一个对象。这是标准的和默认的PHP -据我所知,这不是你可以禁用/关闭的东西。

我们所做的$object->newProp = 'foo'就是向对象追加一个带有值的新键,这个键+值对一旦被添加就不是全局可用的。它只适用于该对象。数组的原理也是如此:

代码语言:javascript
复制
$array = [1, 2, 3];
$array[] = 4;

我们正在对您的对象执行相同的操作:

代码语言:javascript
复制
$object = new Class();
$object->foo = 4;
票数 2
EN

Stack Overflow用户

发布于 2019-06-05 03:28:40

我会创建一个“神奇的”__set()函数,它不设置参数,而是返回一个错误/警告。

代码语言:javascript
复制
public function __set ( string $name , mixed $value ) {
    if( in_array( $name, [ 'various', 'valid', 'properties' ] ) ) {
        $this->$name = $value;
    } else {
        trigger_error( "Setting unknown property ".__CLASS__."->$name is not permitted." );
    }
}

https://www.php.net/manual/en/language.oop5.overloading.php#object.set

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56443607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档