我有点困惑:
我正在使用 OOP 开发一个 php 项目。
我有一个带有构造函数的类:
public function __construct(){
include("myconn.php");
$myconnect = new connect();
$this->conn = new PDO('mysql:host=localhost;dbname='. $myconnect->db, $myconnect->user, $myconnect->pass);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
我没有在类构造函数之前放置 private $conn;
并且我能够在我的方法中使用变量 conn
,如下所示:$q = $this->conn->query($sql) or die("failed!");
在注意到我正在关注的示例中有一个 private $conn;
之后,我很困惑为什么没有弹出错误。
有人可以解释一下吗?以及有关 $this 范围的一些解释会很棒。
最佳答案
当您没有定义类属性而是第一次为其赋值时,它会作为公共(public)属性添加到对象中。通过将其显式设置为私有(private),您将无法在对象外部访问它。
Class A {
public function __construct() {
$this->foo = 'Hi';
}
}
$a = new A();
echo $a->foo; // Outputs 'Hi';
Class B {
private $bar;
public function __construct() {
$this->bar = 'Howdy'; // Accessible only to instances of B
}
}
$b = new B();
echo $b->bar; // Error accessing a private property
这也适用于任何类定义之外:
$object = new \stdClass();
$object->property = 'abc'; // Automatically public
echo $object->property; // Outputs 'abc'
将数组转换为对象也会自动创建公共(public)属性:
$object = (object) [
'property' => 'abc'
];
echo $object->property; // Outputs 'abc'
关于php - PHP 中的 $this 需要一些解释吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19483154/