Php 函数依赖性
因此,在php中,我试图在数据库类中获取一个公共变量,该变量在创建类时连接到数据库。像这样-Php 函数依赖性,php,mysql,class,Php,Mysql,Class,因此,在php中,我试图在数据库类中获取一个公共变量,该变量在创建类时连接到数据库。像这样- <?php class database { public $_link; public function __construct (){ $this->_link = new PDO("mysql:host=localhost; dbname=swinkidc_student", "swinkidc_student", ""); }
<?php
class database {
public $_link;
public function __construct (){
$this->_link = new PDO("mysql:host=localhost; dbname=swinkidc_student", "swinkidc_student", "");
}
}
链接
实际上是数据库
的属性,而不是用户
的属性。因此,请使用:
$query = $this->db->_link->...
您只是缺少了前面的$this->db->
:
$query = $this->db->_link->prepare("SELECT `user_id` FROM `users` WHERE `username` = :user");
现在,它应该起作用了;您正试图直接访问它。首先通过$this->db
访问数据库链接保持对象,然后才访问属性$\u链接
如果因为对象较短而需要$\u link
作为变量,请将对象$this->db->\u link
指定给$\u link
:
$_link = $this->db->_link;
在getUserID函数的开头,它也会起作用。在User类中尝试以下内容:
<?php
class user{
private $db;
public function __construct() {
$this->db = new database;
}
/**
* Returns the ID of a user.
* @param string $user
* @return mixed
*/
public function getUserID($user){
$query = $this->db->_link->prepare("SELECT `user_id` FROM `users` WHERE `username` = :user");
$query->bindParam(":user", $user);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
return $result['user_id'];
}
/**
* Checks if given user is active.
* @param string $user
* @return bool Returns true/false if user is active.
*/
public function isUserActive($user){
}
}
最好反转依赖项并包装$db
class database {
private $_link;
public function __construct(\PDO $pdo) {
$this->_link = $pdo;
}
public function getLink() {
return $this->_link;
}
//other useful stuff
}
class user {
private $_db;
public function __construct(\database $db) {
$this->_db = $db;
}
public function getDB() {
return $this->_db;
}
/**
* Returns the ID of a user.
* @param string $user
* @return mixed
*/
public function getUserID($user) {
$query = $this->getDB()->getLink()->prepare("SELECT `user_id` FROM `users` WHERE `username` = :user");
$query->bindParam(":user", $user);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
return $result['user_id'];
}
/**
* Checks if given user is active.
* @param string $user
* @return bool Returns true/false if user is active.
*/
public function isUserActive($user) {
}
}
用法
现在,您可以在类外配置db连接。$this->db->\u link->prepare()。您应该通过数据库类的实例调用db函数。您需要使用$this->db->u link来获取pdo对象,而不是$link。尝试了一下,但是我得到了“致命错误:调用/home/swinkdc/public_html/studentreach/core/authentication/user.php中未定义的方法database::prepare(),第18行”没有理由包装PDO@sectus到处都有一些用例,比如您需要的一些附加方法。例如,您可以编写$class->select([“field”],“table”,“id=$a”)代码>。哪个比较短。(即使我不喜欢…)谢谢你,好先生!由于我习惯了程序化编程,所以仍然在尝试在PHP中使用OOP。非常感谢。将在5分钟内滴答作响
class database {
private $_link;
public function __construct(\PDO $pdo) {
$this->_link = $pdo;
}
public function getLink() {
return $this->_link;
}
//other useful stuff
}
class user {
private $_db;
public function __construct(\database $db) {
$this->_db = $db;
}
public function getDB() {
return $this->_db;
}
/**
* Returns the ID of a user.
* @param string $user
* @return mixed
*/
public function getUserID($user) {
$query = $this->getDB()->getLink()->prepare("SELECT `user_id` FROM `users` WHERE `username` = :user");
$query->bindParam(":user", $user);
$query->execute();
$result = $query->fetch(PDO::FETCH_ASSOC);
return $result['user_id'];
}
/**
* Checks if given user is active.
* @param string $user
* @return bool Returns true/false if user is active.
*/
public function isUserActive($user) {
}
}
$user = new \user(new \database(new \PDO("mysql:host=localhost; dbname=swinkidc_student", "swinkidc_student", "")));