Странная ошибка php с наследованием - PullRequest
0 голосов
/ 15 февраля 2012

В основном у меня есть куча классов, наследуемых друг от друга.Итак, чтобы лучше проиллюстрировать мою точку зрения:

IndexController extends fController extends fControllerAbstract extends 
MoorActionController extends MoorAbstractController 

Итак, самый высокий родительский элемент в этой группе - MoorAbstractController.

В каждой _ construct () есть родительский элемент :: _construct ();за исключением самого нижнего дочернего класса - IndexController

Итак, проблема, с которой я столкнулся, заключается в следующем (который я решил странным образом, но я хочу знать, что происходит):

У меня есть элемент поля в fController, который IndexController наследует, но значение не передается по какой-то странной причине.Таким образом, отображение $ this-> field_member в IndexController ничего не выдает.Сам элемент поля передается вниз, но не значение, которое он содержит.Я исправил эту ошибку, вызвав parent :: __ construct () последним внутри __construct () в fController.

Более странная часть заключается в том, что при тестировании на один уровень вверх (fControllerAbstract передает элемент поля в fController) работает совершенно нормально.Я действительно не уверен, что происходит.

Вот код:

//WORKS
class fController extends fControllerAbstract
{
protected $field_member = null;

public function __construct()
{        
    $this->field_member="asdasdas";

    parent::__construct();

}
}


//DOESNT WORK
class fController extends fControllerAbstract
 {
protected $field_member = null;

public function __construct()
{
    parent::__construct();

    $this->field_member = "asdasdas"; //value doesnt get passed


}
}
//IndexController/ // /  //
class IndexController extends fController {

public function beforeAction()
{

}

public function home()
{
    echo $this->field_member; 
}
}

// fControllerAbstract ////////
class fControllerAbstract extends MoorActionController
{
public function __construct()
{
    parent::__construct();
}


}

1 Ответ

2 голосов
/ 15 февраля 2012

У меня работает на PHP 5.2 и 5.3.Ваша проблема лежит в другом месте.Дважды проверьте код, который вызывает ->home().

abstract class fControllerAbstract 
{
    public function __construct()
    {

    }

}

class fController extends fControllerAbstract
{
    protected $field_member = null;

    public function __construct()
    {
        parent::__construct();

        $this->field_member = "asdasdas"; //value doesnt get passed


    }
}

class IndexController extends fController 
{

    public function beforeAction()
    {

    }

    public function home()
    {
        echo $this->field_member; 
    }
}


$ic = new IndexController();
$ic->home(); // output: asdasdas
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...