2015-03-30 2 views
1

У меня есть индексный файл. В форме submit я вызываю метод в 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, так как я определен это в конструкторе.

Надеюсь, что я достаточно прозрачен.

+1

определяют '$ name' в качестве члена в классе' sqlFunctions'. например: 'private $ name;' –

ответ

1

Вызов ребенка конструктор также неявно вызывает конструктор родителя, вы должны сделать это сами. Вот почему свойство $ name класса Users не инициализируется MYNAME. Чтобы достичь того, чего вы хотите, вызовите конструктор родителя внутри класса пользователей:

<?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; 
    } 
} 
?> 
2

Вы должны определить атрибут класса в sqlFunctions, такие как

class sqlFunctions { 
    public $name; 

    // etc 
} 

Поскольку ваш Users класс определяет новый конструктор, необходимо вызвать родительский конструктор установить имя MYNAME

class Users { 
    function __construct() { 
     parent::__construct(); 
    } 
} 
+0

Это ** может ** зависеть от версии PHP, но на самом деле вам не нужно иметь $ name, определенное в родительском и/или дочернем классе, по крайней мере, на моем PHP 5.5.9 он работает без него. –

Смежные вопросы