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查询方法。对我来说,经验法则之一是代码接口,而不是具体的类。干杯你完全正确当然。。。但是当我读到这个问题时,我担心这可能有点过分了