访问构造函数内声明的变量

时间:2015-03-30 07:40:43

标签: php oop constructor

我有一个索引文件。在表单提交上,我调用了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因为我在构造函数中定义它。

希望我足够清楚。

2 个答案:

答案 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;
    }
}
?>