我对类非常陌生,并努力将一个简单的函数连接到另一个函数。每当我在ConnectDB函数中添加echo'test'时,它都会通过'test'。但是,它不包括包含文件。
这可能是一个noob错误。
注意:当我将ConnectDB中的内容复制/粘贴到UpdateFollowers函数时,它可以正常工作。我正在寻找一种不使用包含文件来节省时间的方法。
class UpdateAccountInfo {
public function ConnectDB() {
if (strposa($_SESSION['geturl'], $_SESSION['folders']) != FALSE) {
include '../_includes/config.php';
include '../_includes/opendb.php';
} else {
include './_includes/config.php';
include './_includes/opendb.php';
}
}
// update followers
public function UpdateFollowers($getid) {
$this->ConnectDB();
//find the source of the ig account
$sql = "SELECT * FROM ig_accounts WHERE iid = $getid";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
$igname = $row["igname"];
}
............
答案 0 :(得分:1)
在对手头的案例进行任何解释之前,我认为首先获得一些OOP概念非常重要。从问题中的例子来看,我感觉你对类的理解是他们只是"功能桶"可以这么说。事实并非如此。 class是一种通用数据结构,可用于定义对象,与这些对象相关的行为以及这些对象使用的数据。
class Human {
private $firstName;
private $lastName;
private $dateOfBirth;
public function __construct($fn, $ln, $dob) {
$this->firstName = $fn;
$this->lastName = $ln;
$this->dateOfBirth = $dob;
}
public function getFullName() {
return $this->firstName.' '.$this->lastName;
}
}
在上面的示例中,我们定义了Human
类型的所有对象共享的基本结构以及encapsulated一些非常基本的功能(获取{{1}的全名}})。
如果我们看一下您的示例,Human
更多的是功能而不是对象。这是一个始终由系统的其他组件执行的过程,为了本示例的目的,我们将其他组件称为UpdateAccountInfo
。
Account
现在我们有了一个class Account {
private $id;
private $name;
private $conn; // <-- our DB connection
/* other Account properties */
public function __construct($id, $name) {
$this->id = $id;
$this->name = $name;
/* Initialize DB connection */
}
public function updateFollowers() {
/* Perform any logic required to update the followers */
}
}
类型的对象,我们将来添加了许多我们需要的函数。 Account
,addFollowers()
,removeFollowers()
。这些都是属于changeUsername()
对象的进程的示例,可能永远不会被系统的任何其他组件使用。
您可能已经注意到我遗漏了上一个示例中的数据库初始化部分。这有几个原因,但主要是:
Account
关键字创建Account
(或任何对象)的实例时,打开和关闭连接都非常昂贵。new
。为了解决这个问题,我们可以简单地将数据库连接逻辑封装在Account
对象中。
Database
现在您只需要在脚本开头一次初始化数据库连接,并将其传递给可能需要它的其他对象/函数。
class Database {
private $connection;
public function connect($localhost, $name, $password, $database) {
$this->connection = new mysqli($localhost, $name, $password, $database);
if($this->connection->connect_error) {
/* throw an exception */
}
}
public function getConnection() {
return $this->connection;
}
}
如果我们想要修改第二个帐户,我们可以使用刚刚打开的相同数据库连接来执行此操作。
<?php
include_once('../../config.php');
/* include any other required files */
$database = new Database($config['localhost'], $config['username'], $config['password'], $config['dbname']);
// get a specific account
$account = new Account(/* ... */, $database);
// update the account's followers
$account->updateFollowers(/* ... */);