【问题标题】:Nonexistent property at PHP classPHP 类中不存在的属性
【发布时间】:2015-04-29 01:49:30
【问题描述】:

PHP:

如果你实例化一个类,然后之前读取或写入一个不存在的属性,这个属性是添加到类对象还是相同的所有对象?

【问题讨论】:

  • 只针对那个实例;并且读取不存在的属性不会向实例添加任何内容,只会设置属性
  • 写入到不存在的属性会将该属性添加为新的public $<propertyName> 属性。非静态的,意思是:只针对那个实例。但尽可能避免这样做。预定义的属性比杂乱的属性更快,并且更不容易出错(想想$instance->name = 123; echo $instance->nmae;
  • @EliasVanOotegem:有没有办法让 PHP 在这种情况下抛出错误(试图分配给不存在的属性)?就像VB.NET有一个Option Explicit,用法略有不同,只是引用一个例子。
  • 不知道,我已经 3 年没有写 PHP 了

标签: php class properties


【解决方案1】:
  1. 如果您尝试读取属性,则不会添加该属性。

  2. 新属性将仅添加到当前对象中

测试脚本:

$o1 = new stdClass();
$o2 = new stdClass();
$a = $o1->property; // PHP Notice:  Undefined property

var_dump($o1); // class stdClass#1 (0) {}
var_dump($o2); // class stdClass#2 (0) {}

$o1->property = 'property';

var_dump($o1); // class stdClass#1 (0) {public $property => string(8) "property" }
var_dump($o2); // class stdClass#2 (0) {}

$o3 = new stdClass();
var_dump($o3); // class stdClass#3 (0) {}

【讨论】:

    猜你喜欢
    • 2020-08-19
    • 2019-02-02
    • 2019-02-13
    • 2012-08-25
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2015-09-22
    • 2021-07-10
    相关资源
    最近更新 更多