我有一个索引文件。在表单提交上,我调用了class.user.php中的一个方法,该方法还扩展了类class.sqlFunctions。从用户类的方法我在sqlFunction类中调用函数。我无法访问构造函数中定义的变量。
的index.php
<?php
require_once '../includes/constants.php';
require_once DOCROOT.'classes/class.users.php';
$objUser = new Users();
if(isset($_POST) && !empty($_POST)){
$objUser->userLogin();
}
?>
class.users.php
<?php
require_once DOCROOT.'classes/class.sqlFunctions.php';
class Users extends sqlFunctions {
function __construct() {
}
function userLogin() {
echo '<pre>'; print_r($this->find()); die;
}
}
?>
class.sqlFunction.php
<?php
require_once DOCROOT.'includes/config.php';
class sqlFunctions {
function __construct() {
$this->name = 'MYNAME';
}
function find() {
echo '<pre>'; print_r($this->name);
}
}
?>
在上面的一个中,我应该打印MYNAME
因为我在构造函数中定义它。
希望我足够清楚。
答案 0 :(得分:2)
您应该在sqlFunctions中定义类属性,例如
class sqlFunctions {
public $name;
// etc
}
因为您的Users
类定义了一个新的构造函数,所以需要调用父构造函数将name设置为MYNAME
class Users {
function __construct() {
parent::__construct();
}
}
答案 1 :(得分:1)
调用子构造函数也不会隐式调用父的构造函数,您必须自己执行此操作。这就是为什么Users类的$ name属性没有初始化为MYNAME。 要实现您想要的,请在Users类中调用父的构造函数:
<?php
require_once DOCROOT.'classes/class.sqlFunctions.php';
class Users extends sqlFunctions {
function __construct() {
parent::__construct();
}
function userLogin() {
echo '<pre>'; print_r($this->find()); die;
}
}
?>