【发布时间】:2013-04-02 00:17:37
【问题描述】:
我已经四处搜索,但找不到关于在 PHP 类中使用 $this 的明确答案(如果有的话)。我仍在尝试使用 OOP 方法,并希望确保我使用的是最佳实践。
所以我的问题是关于应该如何以及何时定义变量以及何时应该使用 $this 来引用它们。
假设我有以下课程....
class Foo {
private $pin;
private $stat;
public function get_stat($pin) {
$this->stat = shell_exec("blah read $pin");
return $this->stat;
}
}
所以在上面的函数中,我将 var $pin 传递给了类方法。无需使用 $this->pin 就可以正常工作...但是下面的代码似乎更像是做同样事情的正确方法.....
class Foo {
private $pin = 0;
private $stat = 0;
public function get_stat($pin) {
$this->pin = $pin;
$this->stat = shell_exec("blah read $this->pin");
return $this->stat;
}
}
另外,我已将 $pin 和 $stat 变量设置为 = 0。我认为这可以只是一个默认值,或者我可以像第一个示例中那样定义它们 private $pin;和私人 $stat;.
回到我的问题,关于如何在类方法中使用成员和 $this 的最佳实践是什么?每个示例的优点或缺点是什么?
【问题讨论】:
-
我在codereview.stackexchange 上得到了一个很好的答案。看看here
-
感谢 ASOK 的链接!现在,为什么你应该只使用 $this ... 来引用类中的属性是有道理的。我不太明白在课堂外访问它们的关系。
-
请不要使用未转义的值调用 shell!
shell_exec("blah read $pin");对代码注入开放。始终使用转义函数,在这种情况下用于 shell 命令:escapeshellarg() -
嗨,斯文,是的,我对没有“清理”输入感到内疚。这只是我试图快速开始工作的一个快速而肮脏的例子。在我完全理解我想要完成的 OOP 方面之后,转义的其余逻辑就会出现。再次感谢!
-
@user2233942 "WouterJ" 指的是从类外部访问属性与类内的
$this->比较,例如$Foo = new Foo()然后$Foo->get_stat("Variable Passed")与类内的$this->get_stat("Variable Passed")。跨度>