我是面向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 ?
答案 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的简短介绍。