我知道之前已经问过这个问题,我已经查看了多个线程,了解为什么会发生这种情况,但是无法理解我的工作方式不同,因为其他变量以相同的方式定义并以相同的方式工作.
class item{ var $name = "test"; var $id = 3; function setId($newID){ global $id; $id = $newID; } function getId(){ return $GLOBALS['id']; } function setName($newName){ global $name; $name = $newName; } function getName(){ return $GLOBALS['name']; } }
这是该类的一个片段,因为它实际上很长但是重复了getName和setName以获得5/6个项目.
$item[0]->getName();
会返回"测试"
$item[0]->getId();
返回"未定义索引:第59行链接到文件的 id ",这是getId()函数.
除了getId()之外的每个函数都有效,我不知道为什么
编辑 - 这个问题已经回答我等着能够接受答案.$这适用于变量返回(即使我仍然不确定为什么即使其他5或6个人也会这样)
你的理解变量范围一内类是错误的.通常,Setter和getter用于修改和获取private
或protected
属性.分配属性会var
自动为它们提供public
范围.
在课堂上,你不需要使用global
- 事实上,global
无论如何使用是不好的做法.您可以使用引用类属性$this
.
例如;
class item { private $name = "test"; private $id = 3; function setId($newID){ $this->id = $newID; } function getId(){ return $this->id; } function setName($newName){ $this->name = $newName; } function getName(){ return $this->name; } }