php - 在类声明中使用外部对象 - PHP

标签 php mysql class

假设我有两个 PHP 类:UserConnection

从他们的名字中可以明显看出他们所做的事情。

现在假设我有这个代码:

User.php

<?php

class User {

    static function get_email( $user_id ) {
        $conn_object = new Connection();
        $connection  = $conn_object->connection;
        // do stuff with the connection object
    }

}

?>

Connection.php

<?php

class Connection {

    public $connection;

    public function __construct() {
        $this->connection = // connect to the database here
    }

}

?>

main.php

<?php

require "Connection.php";
require "User.php";

$email = User::get_email( 4 ); // this doesn't work

?>

当我在 main.php 中执行类似操作时,我收到了一堆错误。当我在 User.php 文件中 var_dump( $conn_object ); 时,我总是得到一个 null,就像该文件甚至没有“查看”Connection 对象,或者知道它存在。

但是,当我直接使用 main.php 中的 Connection 类时,我没有收到任何错误,并且一切运行顺利。这意味着我的 Connection 对象没有任何语法错误或其他错误。

PHP中不允许做这种事吗?该语言不允许在类中使用类吗?

最佳答案

仅供引用:我会尝试回答一个问题,就好像我第一次问这个问题一样,并尝试包含那些知识不如您或我的人所需的尽可能多的信息。这会让问题变得更容易对于那些刚刚学习寻找答案的人来说。

需要“Connection.php”;

需要“User.php”;

$email = User::get_email( 4 );//这不起作用

“::”引用父方法,因此如果您没有使用 User 类扩展 Connection 类,它将不起作用。即使你有,也不能保证它能工作,这更有可能意味着我在尝试时做错了什么。

要使用外部连接对象,您需要将连接对象传递给用户对象,以便用户对象可以使用连接对象,如下所示。

$thisConnection = new Connection(); $thisUser = new User(); $thisUser = new User($thisConnection); 或者 $thisUser->setConnection($thisConnection);

然后,在您的用户类中,您将需要一个方法或一组方法来复制连接类中的方法。

但是,正如 Joaquin Javi 所提到的,面向对象编程使用继承,子对象继承并可以访问父对象的方法。

此外,通过使用用户类扩展连接类,您可以节省大量编码。

另一方面,如果您出于特定原因不想使用扩展和继承快捷方式,则需要将 Connection 对象传递到 User 对象中。

需要明确的是,当您使用用户类扩展Connection类时,用户类将继承连接类的方法和变量,只要将它们设置为public或protected,您就可以能够访问任何变量或方法,例如 get_email 方法,如下所示:

$thisUser->get_email( 4 );

希望这有帮助。 斯科特

关于php - 在类声明中使用外部对象 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32832208/

相关文章:

php - 我如何控制主干项目的 PHP、 header 等版本的缓存?

php - 创建两个相互使用的类?

php - apache error.log 中的 "[notice] child pid XXXX exit signal Segmentation fault (11)"

MySQL 具有范围条件的计数

c++ - 如何为具有私有(private)对象作为属性的类编写移动构造函数和赋值运算符?

php - PHP去除重复值的方法

php - 更新声明无效

mysql - 函数执行时mysql字段的值递增

c++ - 空类的单继承层次结构是否保证 sizeof 相等?

c# - 如何一般地从基类实例化派生类