Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP类变量定义是否必要?_Php_Oop - Fatal编程技术网

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面向对象编程,但我知道用过程的方式编写代码

如果这是我的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();