为什么在PHP中隐式属性声明?

loc*_*boy 0 php

我想知道为什么当大多数语言需要在类声明本身中定义属性时,PHP语言允许隐式属性声明(参见下面的代码).这种编码风格有实际用途吗?

$user1 = new User();
$user1->name = "Kylie";
echo $user1->name;

class User{}
Run Code Online (Sandbox Code Playgroud)

Kin*_*nch 5

用例是值对象

$a = new stdClass;
$a->something = 12;
$a->somethingElse = 'Hello World';
myFunction ($a);
Run Code Online (Sandbox Code Playgroud)

这允许创建一些对象,这些对象只是携带结构化数据(类似于structs其他语言),而无需为其定义类.

另一点是,因为PHP无论如何都是弱类型的 - 没有真正的理由禁止它.如果你需要更强大的东西,那就过度了__set()

public function __set ($propertyName, $value) {
  throw new Exception("Undefined Property $propertyName");
}
Run Code Online (Sandbox Code Playgroud)