PHP类变量定义是否必要?

时间:2010-07-20 06:19:35

标签: php oop

我是面向PHP面向对象编程的新手,但我知道以程序方式编写代码。

如果这是我的PHP类

<?php
class person {
  var $name;
  function __construct($persons_name) {
   $this->name = $persons_name;
  }

  function get_name() {
     return $this->name;
  }
}
?>

如果我在PHP页面中访问它

$jane = new person("Jane Doe");
echo "Her name is : ".$jane->get_name();

问题: 是否真的有必要将var $name;放在我的PHP类中 即使我的PHP类中没有var $name;,我也可以正确地获得 的输出她的名字是:Jane Doe

4 个答案:

答案 0 :(得分:4)

从技术上讲,不,PHP对这样的事情非常宽容。但这是一种很好的做法,只是出于文档目的。

可能更重要的是,明确声明属性可让您设置其visibility。在您的示例中,$ name是一个公共属性(public是PHP中的默认可见性)。如果你不需要它是公开的(由于getter / setter允许更好地控制可以分配的值,通常更安全),那么你应该声明是保护还是私有。

答案 1 :(得分:2)

在语义上,你应该,因为$name确实是你班级的一个属性。您的构造函数已将$persons_name分配给该属性,但如果您将var $name;退出,则您脚本的其余部分将不会真正知道您的类中存在此类属性。此外,如果您的构造函数没有立即分配,person::get_name()将尝试检索未声明的$name属性并触发通知。

作为Brenton Alker says,明确声明您的类属性可让您设置其可见性。例如,由于您get_name()作为$name的吸气者,因此您可以将$name设置为private,因此您之后无法更改此人的姓名创建一个person对象。

此外,尝试分配未声明的类属性会导致它们在被分配之前声明为public

答案 2 :(得分:0)

非常有用。 想象一下你在一个数组中写了一堆具有不同名字的人物对象,你将在你网站的另一个地方调用所有对象的名字。这可以在您存储每个特定人的姓名时使用。

答案 3 :(得分:0)

如果我理解正确,您不需要声明var $ name。您可以使用PHP的魔术方法,在本例中为__set__get

编辑:关于magic methods @ Nettuts的简短介绍。