在类声明中使用外部对象-PHP
假设我有两个PHP类:在类声明中使用外部对象-PHP,php,mysql,class,Php,Mysql,Class,假设我有两个PHP类:User&Connection 从他们的名字可以明显看出他们的所作所为 现在假设我有以下代码: User.php <?php class User { static function get_email( $user_id ) { $conn_object = new Connection(); $connection = $conn_object->connection; // do stuff w
User
&Connection
从他们的名字可以明显看出他们的所作所为
现在假设我有以下代码:
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
}
}
?>
<?php
class Connection {
public $connection;
public function __construct() {
$this->connection = // connect to the database here
}
}
?>
<?php
require "Connection.php";
require "User.php";
$email = User::get_email( 4 ); // this doesn't work
?>
main.php
<?php
class User {
static function get_email( $user_id ) {
$conn_object = new Connection();
$connection = $conn_object->connection;
// do stuff with the connection object
}
}
?>
<?php
class Connection {
public $connection;
public function __construct() {
$this->connection = // connect to the database here
}
}
?>
<?php
require "Connection.php";
require "User.php";
$email = User::get_email( 4 ); // this doesn't work
?>
记住类通过继承或依赖注入共享方法或属性
<?php
class Connection {
protected $connection;
//we changed protected because only direct inherit can acces
public function __construct() {
$this->connection = // connect to the database here
}
}
<?php
include connection.php...
class User extends Connection{
function __construct(){
parent::contruct();
}
static function get_email( $user_id ) {
$this->connection->yourDbstuff ;
// do stuff with the connection object
}
}
?>
仅供参考:我试图回答一个问题,就好像我是第一次问这个问题一样,并尝试包含一些没有你或我那么多知识的人所需要的信息。这让那些刚刚学会寻找答案的人更容易
需要“Connection.php”代码>
需要“User.php”代码>
$email=User::get_email(4);//这不起作用
“::”引用了一个父方法,因此如果您没有使用User类扩展Connection类,它将无法工作。即使你有,它也不能保证有效,这更可能意味着我在尝试时做了错事
要使用外部连接对象,需要将连接对象传递给用户对象,以便用户对象可以按如下方式使用连接对象
$thisConnection=新连接()代码>
$thisUser=新用户()代码>
$thisUser=新用户($thisConnection)代码>
或
$thisUser->setConnection($thisConnection)代码>
然后,在用户类中,需要一个方法或一组方法来复制连接类中的方法
然而,正如Joaquin Javi所提到的,面向对象编程使用继承,子对象继承并访问父对象方法
此外,通过使用user类扩展connection类,您可以节省大量的代码
另一方面,如果您有不想使用extends和继承快捷方式的特定原因,则需要将Connection对象传递给User对象
需要明确的是,当您使用user类扩展Connection类时,user类将继承Connection类的方法以及变量,只要它们设置为public或protected,并且您将能够访问任何变量或方法,例如get_email方法,如下所示:
$thisUser->获取电子邮件(4)代码>
希望这有帮助。
Scott提供这些错误。您的代码运行没有错误。已删除所有“帮助”和“感谢”语句将连接
对象注入用户
对象似乎是实现此目的的最佳方式。不过,附带的问题是:如果我有一个父类,它有一个私有保护的
变量,那么子类仍然可以访问该变量吗?感谢您的帮助。无论出于何种原因,如果变量或方法设置为private,则childclass/子类将无法访问它。