В PHP, в чем разница между: Константы и статические переменные? Расширение класса и создание его объекта? Я знаю, как их можно использовать, но я не могу четко различать их.
Мне интересно, есть ли веские причины, почему это поведение возможно в текущей реализации PHP 5.4: trait T { public function test(PDO $pdo) {} } class C { use T; public function test(DOMDocument $dom) {} } Я думал, что тот факт, что класс использует черту, гарантировал, что у этого класса есть определенный интерфейс. Но здесь, если […]
В каждом примере, который я видел, расширенные классы реализуют интерфейсы своих родителей. Для справки, следующий пример: interface MyInterface{ public function foo(); public function bar(); } abstract class MyAbstract implements MyInterface{ public function foo(){ /* stuff */ } public function bar(){ /* stuff */ } } // what i usually see class MyClass extends MyAbstract implements […]
Работа с классом библиотеки PHP, и я хотел бы обернуть все свои публичные функции в подкласс … Что-то вроде строк: class BaseClass { function do_something() { some; stuff; } function do_something_else() { other; stuff; } /* * 20-or-so other functions here! */ } class SubClass extends BaseClass { function magicalOverrideEveryone() { stuff-to-do-before; // ie Display […]
Возможно ли получить местоположение файла PHP, оцененного во время выполнения? Я ищу что-то похожее на магическую константу __DIR__ , но оценивается во время выполнения, как последнее связывание. Аналогичная разница с self и static : __DIR__ ~ self ??? ~ static Моя цель – определить метод в абстрактном классе, используя __DIR__ который будет оцениваться соответственно для […]
Я создаю веб-приложение PHP, которое должно предоставить пользователю возможность заказать «установку» / настройку соединения (ConnectDirect или File Transfer Gateway) между ним и другим человеком / организацией. (Техническая спецификация реализации соединения не важна – в приложении речь идет только о соединениях как продуктах, которые можно заказать и управлять). Иерархия классов для своего модельного слоя должна представлять […]
Я работаю в рамках веб-приложения, а часть его состоит из нескольких сервисов, которые реализованы как одиночные. Все они расширяют класс Service, где выполняется однопользовательское поведение, выглядя примерно так: class Service { protected static $instance; public function Service() { if (isset(self::$instance)) { throw new Exception('Please use Service::getInstance.'); } } public static function &getInstance() { if (empty(self::$instance)) […]
Из класса php singleton ниже <?php class Singleton { /** * @var Singleton The reference to *Singleton* instance of this class */ private static $instance; /** * Returns the *Singleton* instance of this class. * * @return Singleton The *Singleton* instance. */ public static function getInstance() { if (null === static::$instance) { static::$instance = new […]
Мне интересно, может ли в ситуации, когда я расширяю класс, который уже использовал ключевое слово «use» над ним, чтобы использовать определенное пространство имен – нужно ли мне добавить другое «использование» над классом наследования для использования того же пространства имен? Ситуация такая: namespace Core; use System\Plugin; class Front extends Application { } и теперь в контроллере, […]
У меня есть интерфейс: interface AbstractMapper { public function objectToArray(ActiveRecordBase $object); } И классы: class ActiveRecordBase { … } class Product extends ActiveRecordBase { … } ======== Но я не могу этого сделать: interface ExactMapper implements AbstractMapper { public function objectToArray(Product $object); } или это: interface ExactMapper extends AbstractMapper { public function objectToArray(Product $object); } […]