在 PHP 中使用 Extend 从另一个类调用函数



如何使用"extends"将此openConnection((函数用于我的其他类,这是我尝试过的,但它不起作用

数据库连接.php

class DBConnection {
private $host;
private $username;
private $password;
private $dbsource;
private $options;
public  $conn;
public function __construct(){
$this->host     = $_ENV['DB_HOST'];
$this->username = $_ENV['DB_USER'];
$this->password = $_ENV['DB_PASSWORD'];
$this->dbsource = $_ENV['DBSOURCE'];
$this->conn     = "";
}
public function openConnection(){
$this->conn = new PDO($this->dbsource, $this->username, $this->password,$this->options);
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $this->conn;
}   
}

测试类.php

class TestClass extends DBConnection {
public $conn;
public function __construct(){
$this->conn = $this->openConnection();
}
}

由于您要初始化父类构造函数中的属性,因此您必须调用parent::__construct()

<?php
class foo
{
private $message;
public function __construct()
{
$this->message = "Hello World";
}
public function Bla()
{
echo $this->message . PHP_EOL;
}
}
class bar extends foo
{
public function __construct()
{
parent::__construct();
$this->Bla();
}
}
$obj = new bar();

这输出

世界您好

İ如果两个类在单独的文件中扩展将不起作用(它不适合我(。 我需要不要改变我自己的连接:https://phpdelusions.net/pdo_examples/connect_to_mysql 成一个类

这是你的第一堂课

class DBConnection {
/** @var DBConnection */
private $pdo;
public function __construct($pdo) {
$this->pdo = $pdo;
}    
function runQuery($sql, $params) {
$stmt = $this->pdo->prepare($sql);
$stmt->execute($params);
if ($stmt->rowCount() > 0) {
while($row = $stmt->fetch()) {
$resultset[] = $row;
}
}
}
}

这里是您在另一个文件中的第二个类

require_once "../db.php";
require "DBConnection.php";
class TestClass {
/** @var DBConnection */
private $DBConnection;
public function __construct($DBConnection) {
$this->DBConnection = $DBConnection;
}
function getMemberByUsername($username) {
$sql = "Select * from users where username = ?";
//Here I call a function in first class
$result = $this->DBConnection->runQuery($sql, array($username));
return $result;
}
}

这是usaqe:

$DBConnection = new DBConnection($pdo);
$auth = new TestClass($DBConnection);
$auth->getMemberByUsername($username);

特别感谢您的共同看法和来自站点 https://www.sitepoint.com/community/t/how-to-call-a-function-from-class-one-into-a-function-in-class-two/346114/10@droopsnoot为您指明了道路。

相关内容

最新更新