PHP类变量定义是否必要?
我不熟悉PHP面向对象编程,但我知道用过程的方式编写代码 如果这是我的PHP类PHP类变量定义是否必要?,php,oop,Php,Oop,我不熟悉PHP面向对象编程,但我知道用过程的方式编写代码 如果这是我的PHP类 <?php class person { var $name; function __construct($persons_name) { $this->name = $persons_name; } function get_name() { return $this->name; } } ?> 问题: 是否真的需要输入var$name在我的PHP类中
<?php
class person {
var $name;
function __construct($persons_name) {
$this->name = $persons_name;
}
function get_name() {
return $this->name;
}
}
?>
问题:
是否真的需要输入var$name代码>在我的PHP类中
即使没有var$name,我也能正确地得到她的名字是:Jane Doe的输出
在我的PHP类中?从语义上讲,您应该这样做,因为$name
确实是您的类的一个属性。您的构造函数已经为属性分配了$persons\u name
,但是如果您保留了var$name代码>输出,脚本的其余部分不会真正知道类中存在这样的属性。此外,如果构造函数没有立即分配它,person::get_name()
将尝试检索未声明的$name
属性并触发通知
同样,显式声明类属性允许您设置它们的可见性。例如,由于您有get_name()
作为$name
的getter,因此可以将$name
设置为private
,以便在创建person
对象后,不能从类外更改人名
另外,尝试分配给未声明的类属性会导致它们在分配之前声明为public
。语义上,您应该这样做,因为$name
确实是类的属性。您的构造函数已经为属性分配了$persons\u name
,但是如果您保留了var$name代码>输出,脚本的其余部分不会真正知道类中存在这样的属性。此外,如果构造函数没有立即分配它,person::get_name()
将尝试检索未声明的$name
属性并触发通知
同样,显式声明类属性允许您设置它们的可见性。例如,由于您有get_name()
作为$name
的getter,因此可以将$name
设置为private
,以便在创建person
对象后,不能从类外更改人名
另外,尝试分配给未声明的类属性会导致它们在被分配之前声明为public
。这非常有用。
假设您在一个数组中编写了一组具有不同名称的person对象,您将在网站的另一个位置调用所有对象的名称。当您存储每个特定人员的姓名时,这是可能的。这非常有用。
假设您在一个数组中编写了一组具有不同名称的person对象,您将在网站的另一个位置调用所有对象的名称。当您存储每个特定人员的姓名时,这是可能的。如果我理解正确,您不需要声明var$name。在本例中,您可以使用PHP的神奇方法
编辑:这里有一个关于@Nettuts的小介绍。如果我理解正确,您不需要声明var$name。在本例中,您可以使用PHP的神奇方法
编辑:这里有一个关于@Nettuts的小介绍。从技术上讲不是,不,PHP对这样的事情非常宽容。但这是一种良好的做法,即使只是出于文档目的
可能更重要的是,显式声明属性可以让您设置其属性。在您的示例中,$name是一个公共属性(public是PHP中的默认可见性)。如果您不需要将其公开(不公开通常更安全,因为getter/setter允许更好地控制可以分配的值),那么您应该声明是受保护的还是私有的。从技术上讲不是,不,PHP对这样的事情非常宽容。但这是一种良好的做法,即使只是出于文档目的
可能更重要的是,显式声明属性可以让您设置其属性。在您的示例中,$name是一个公共属性(public是PHP中的默认可见性)。如果您不需要将其公开(不公开通常更安全,因为getter/setter允许更好地控制可以分配的值),那么您应该声明是受保护的还是私有的。您能给出一个非常有用的示例代码吗,因为我是OOP新手。谢谢:你能给出一个非常有用的示例代码吗?因为我是OOP新手。谢谢:(相关)(相关)还有一个问题,先生:$this->name在函数中是否与var$name“相关”;或者它们是两个不同的变量我的意思是声明var$name的原因是因为函数中有$this->name?是的,$this->name引用了当前实例($this)的($next)属性。还有一个问题先生:函数中的$this->name是否与var$name“相关”;或者它们是两个不同的变量我的意思是声明var$name的原因是因为函数中有$this->name?是的,$this->name引用了当前实例($this)的($next)属性。
$jane = new person("Jane Doe");
echo "Her name is : ".$jane->get_name();