php - PHP 中的 $this 需要一些解释吗?

标签 php oop pdo

我有点困惑:

我正在使用 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/

相关文章:

php - 带括号和不带括号的实例化有区别吗?

php - 使用 PDO 进行多次插入

php - PDO 插入时使用值 null 而不是空值

php - 创建检查(if 语句)以使用 PDO 在 PHP 中创建数据库

javascript - 每当调用其他类中的方法时调用该方法

javascript - 如何在 javascript 中迭代 this.value

php - 我如何为 mysql 数据库中的每一行创建一个唯一的 php 页面

php - 试图将密件抄送字段发送到 php 邮件程序

php - YII2 错误 - 需要应用程序的 "id"配置

php - Laravel 5.1 中未找到基表或 View