Вид получил проблему с использованием наследования / полиморфизма с частными методами. Пример: class cmsPage{ private function getBlock(){ $block = new cmsBlock(); return $block } function createBlock(){ $block = $this->getBlock(); $block->save(); } //… do various things } class specialCmsPage extends cmsPage{ private function getBlock(){ $block = new specialCmsBlock(); return $block } } Естественно, я хочу, чтобы […]
Я хочу сделать log-входы с моим проектом codeigniter. Некоторые соображения: 1) Есть два контроллера, которые находятся за пределами, для которых не требуется аутентификация. Один для информации (splash_pages и т. Д.), А другой для создания сеанса. 2) Все остальные контроллеры наследуют от главного контроллера, который, как часть своего конструктора, требует, чтобы вы вошли в систему или […]
У меня есть суперкласс, который содержит свойства и методы их настройки class Super{ private $property; function __construct($set){ $this->property = $set; } } то у меня есть подкласс, который должен использовать это свойство class Sub extends Super{ private $sub_property function __construct(){ parent::__construct(); $this->sub_property = $this->property; } } но я продолжаю получать ошибку Notice: Undefined property: Sub::$property […]
В main.php автозагрузка и создается новый объект: function __autoload($class) { require_once($class . '.php'); } … $t = new Triangle($side1, $side2, $side3); В Triangle.php : class Triangle extends Shape {…} Shape.php – абстрактный класс: abstract class Shape { abstract protected function get_area(); abstract protected function get_perimeter(); } Я вижу, что функция __autoload вызывает Triangle.php , но […]
У меня есть интерфейс, который декларирует методы реализации, такие как find, findOrFail и т. Д., В основном, красноречивые методы Laravel. Я объявляю эти методы в интерфейсе, потому что не все, что реализует интерфейс, будет красноречивым, поэтому я объявляю их в интерфейсе, поэтому мое приложение всегда знает, что методы будут там. Я хочу знать, кроме того, […]
Хорошо или плохо для абстрактного класса реализовать интерфейс? оба примера ниже работают, но какой из них имеет больше смысла для вас ? Опция 1, interface A { function foo(); } abstract class B implements A { abstract public function foo(); } class C extends B { public function foo() { echo 'works'; } } $o […]
Я пытаюсь изменить поведение метода Gedmo \ Tree \ RepositoryUtils-> buildTree (), потому что я хотел бы изменить способ построения возвращаемого массива. Я стараюсь: У меня есть класс: <?php namespace MyCorp\CMSBundle\Util; use Doctrine\Common\Persistence\Mapping\ClassMetadata; use Doctrine\Common\Persistence\ObjectManager; use Gedmo\Exception\InvalidArgumentException; /** * Description of jsandjqTreeCompatibleRepositoryUtils * * @author peterrus */ class jsandjqTreeCompatibleRepositoryUtils extends Gedmo\Tree\RepositoryUtils { public function buildTree(array […]
Итак, это моя черта: trait Cacheable { protected static $isCacheEnabled = false; protected static $cacheExpirationTime = null; public static function isCacheEnabled() { return static::$isCacheEnabled && Cache::isEnabled(); } public static function getCacheExpirationTime() { return static::$cacheExpirationTime; } } Это базовый класс: abstract class BaseClass extends SomeOtherBaseClass { use Cacheable; … } Это мои 2 заключительных класса: class […]
Я работал с PHP уже несколько лет, но до сих пор мне не приходилось иметь дело с сериализацией явно, используя только $_SESSION . Теперь у меня есть проект, который требует от меня вручную реализовать механизм сериализации для определенных данных – и я понимаю, что проблема применима и к $_SESSION . У меня есть класс, который […]
Допустим, у нас есть модуль под названием core_crud с чем-то вроде этого в контроллере: if (!defined('BASEPATH')) exit('No direct script access allowed'); class Core_crud extends MX_Controller { function __construct() { parent::__construct(); $this->load->model('mdl_core_crud'); } public function index() { // code goes here } } И теперь я хочу расширить этот модуль еще одним модулем shop_crud . Как […]