PHP类扩展
发布时间:2020-12-13 21:47:04 所属栏目:PHP教程 来源:网络整理
导读:我有一个问题,了解类扩展如何工作.. 我正在尝试扩展一个类来分割不同文件中的函数,使其更有条理. 但我有问题访问主类的变量和函数到子类. 那是我的意思: 父类:它是uFlex类v 0.88 我不写所有,因为它很长.. class uFlex { //Constants const version = 0.88;
我有一个问题,了解类扩展如何工作..
我正在尝试扩展一个类来分割不同文件中的函数,使其更有条理. 但我有问题访问主类的变量和函数到子类. 那是我的意思: 父类:它是uFlex类v 0.88 class uFlex { //Constants const version = 0.88; const salt = ""; //End of constants\ /** * PDO / database credentials */ var $db = array( "host" => '',"user" => '',"pass" => '',"name" => '',//Database name "dsn" => '' //Alterntive PDO DSN string ); function connect(){ if(is_object($this->db)) return true; /* Connect to an ODBC database using driver invocation */ $user = $this->db['user']; $pass = $this->db['pass']; $host = $this->db['host']; $name = $this->db['name']; $dsn = $this->db['dsn']; if(!$dsn){ $dsn = "mysql:dbname={$name};host={$host}"; } $this->report("Connecting to database..."); try{ $this->db = new PDO($dsn,$user,$pass); $this->report("Connected to database."); }catch(PDOException $e){ $this->error("Failed to connect to database,[SQLSTATE] " . $e->getCode()); } if(is_object($this->db)) return true; return false; } } 然后: <?php class admin extends uFlex { function adm_getUsers(){ if(!$this->connect()) return false; $sql= "SELECT * from users LIMIT 30"; $st = $this->db->prepare($sql); $out = $st->execute(); $row = $st->fetchAll(PDO::FETCH_ASSOC); return $row; } function adm_getSingleUser($id){ if(!$this->connect()) return false; if(is_numeric($id)){ $sql= "SELECT * from users WHERE id = '$id'"; }else{ $sql= "SELECT * from users WHERE username = '$id'"; } $st = $this->db->prepare($sql); $out = $st->execute(); $row = $st->fetch(PDO::FETCH_ASSOC); return $row; } } ?> 我在每个页面中包含的配置文件中对它们进行了实际操作: $user = new uFlex(false); $admin = new admin(); 但是当使用$admin-> adm_getUsers(); $row数组它是空的. 在尝试在两个类之间拆分函数之前,我在主类上使用了相同的函数,并且正在工作. 这是我第一次尝试扩展一个类..我在谷歌搜索,并在这里提出了一些问题,但这对我来说太复杂了,因为我还在学习PHP. 解决方法
这是继承不是最好的答案.相反,您可以删除继承并使用组合.将您的uFlex实例作为Admin的依赖项传递,如下所示:
$user = new uFlex(false); $admin = new Admin($user); // uFlex is being passed in 您将首先需要更新您的PHP类,因为有一些更改: class Admin { // Added private variable that will hold the uFlex instance private $user; // Added a class constructor which will be called when we create a new Admin function __construct($user) { // Receives an instance of uFlex $this->user = $user; } function adm_getUsers(){ if(!$this->user->connect()) return false; // Call connect on user $sql= "SELECT * from users LIMIT 30"; $st = $this->user->db->prepare($sql); // Call prepare on db of user $out = $st->execute(); $row = $st->fetchAll(PDO::FETCH_ASSOC); return $row; } function adm_getSingleUser($id){ if(!$this->user->connect()) return false; // Same here if(is_numeric($id)) { $sql= "SELECT * from users WHERE id = '$id'"; } else { $sql= "SELECT * from users WHERE username = '$id'"; } $st = $this->user->db->prepare($sql); // And here $out = $st->execute(); $row = $st->fetch(PDO::FETCH_ASSOC); return $row; } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |