Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何从其他类访问类对象_Php_Class_Oop - Fatal编程技术网

Php 如何从其他类访问类对象

Php 如何从其他类访问类对象,php,class,oop,Php,Class,Oop,我的问题是,我是否可以从另一个类访问类对象,而第二个类不扩展第一个类: <?php class MySQL { public function query($data){ //do something } ?> <?php class Users { public function getUser($id){ MySQL::query($data); // or $MySQL->query();

我的问题是,我是否可以从另一个类访问类对象,而第二个类不扩展第一个类:

<?php 
class MySQL {
    public function query($data){
        //do something
    }
?>
<?php 
class Users {
    public function getUser($id){
        MySQL::query($data); // or $MySQL->query();
        return $something;
    } 
?>


这可能吗?或者第二个类正在扩展第一个类?

如果您希望像这样访问
MySQL::query
,那么
query
方法应该是静态的

否则,您需要从MySQL类实例化一个新对象:

class Users {

    public function getUser($id) {
        //MySQL::query($data); //Static way
        $MySQL = new MySQL();
        $something = $MySQL->query($mydata);
        return $something;
    }
}

在依赖注射的世界里,它看起来是这样的:

class MySQL {
    public function query($data){
        //do something
    }
}

class Users {
    private $mysql;

    public __construct($mysql){
        $this->mysql = $mysql
    }

    public function getUser($id){
        $this->mysql->query($data);
        return $something;
    } 
}

$mysql = new MySql();
$users = new Users($mysql);

$MySQL类是否可以从Users类开始启动,这样我就可以从Users类拥有的每个函数调用它?Errr。。不像你想的那样。您可以定义一个
private$MySQL类中的变量,位于变量声明部分。当您在
\uuu构造()中
,您可以设置
$this->MySQL=newmysql()
因此,稍后在您的类中,您可以在任何地方使用
$this->MySQL->query($data)
MySQL
类的任何其他非女贞方法。通过例子来了解这些课程。我会做一些不同的事情。类用户不应该依赖于类MySql,也不应该关心它将使用什么连接,同意吗?今天是MySql,但明天可能是任何其他的。因此,我将创建一个名为DbConectionInterface的接口,带有公共函数query();然后创建一个类MySql实现DbConnectionInterface并实现MySql查询方法。对我来说,经验法则之一是代码接口,而不是具体的类。干杯你完全正确当然。。。但是当我读到这个问题时,我担心这可能有点过分了