Есть базовый класс View, в котором лежит protected static свойство:
<?php
namespace core;
/**
* Class View
* @category View class
* @package core
* <pre>
* Описывает контракт представления (View) для приложения.
* </pre>
*/
class View
{
#region Public Static members
protected static $VIEWS_SUB_FOLDERS = array(
'authorization' => "authorization",
'admin' => "admin",
'info_pages' => "info_pages"
);
#endregion
//public $template_view; //здесь можно указать общий вид по умолчанию.
/**
* @param $content_view виды отображающие контент страниц;
* @param $template_view общий для всех страниц шаблон;
* @param null $data массив, содержащий элементы контента страницы. Обычно заполняется в модели.
*/
function generate($content_view, $template_view, $data = null)
{
include 'application/views/templates/' . $template_view;
}
}
?>
Как мне получить это свойство в этом классе (см. метод action_index())??:
<?php
namespace core\controllers;
use core as c;
use core\models as cm;
/**
* Class Controller_AboutUs
* @package core\controllers
* @category Controllers category
* @author Mazur Alexandr
*/
class Controller_AboutUs extends c\Controller
{
/**
* Controller_AboutUs constructor.
* <pre>
* Инициализирует свойства model и view
* </pre>
*/
public function __construct()
{
$this->model = new cm\Model_AboutUs;
$this->view = new c\View();
}
/**
* @access public
* @return void
* <pre>
* Рендерит страницу "О нас" (AboutUs)
* </pre>
*/
public function action_index()
{
//$this->view-> так доступ к статическому свойству не получить
//$this->view:: так тоже
//View:: тоже не то, свойство же protected
//А как тогда???
//$this->view->generate("", "");
}
}
p.s. есть ли смысл так записывать аннотации в php (не смотря на русский язык в них)?
канонический ответ - никак, на то оно и protected; но когда нельзя, но очень хочется...
1 - ломать в лоб, через Reflection (грязно, нечестно, но работает)
http://stackoverflow.com/questions/6448551/is-there-any-way-to-set-a-private-protected-static-property-using-reflection-cla
2 - хитрить аккуратнее - наследовать новый класс от View, и в новом классе сделать прокси для свойства (вроде public методов get_this_protcted_field_value() /set_this_protcted_field_value() ), и соответственно в конструкторе контроллера создавать экземпляр собственной вьюхи с "бэкдорами".
3 - ну, вариант "сделать его публичным" не предлагаю, т.к. полагаю, что автор адекватен и у него есть причины, по которым он так сделать не может :)
Виртуальный выделенный сервер (VDS) становится отличным выбором
Здравствуйте, существует класс для шифрования/дешифрования по алгоритму AES от Chris VenessНа всякий случай привиду конкретные файлы php: AES
Собственно сабж заключается в следующем: как завещал phpnet использую временную метку для определения просроченных сессий
Как из JsF обращаться к колонкам DataTableПо каким id&?как происходит обращение внутрь к элементу