Мы принимаем к оплате:

«Подарочный сертификат» от нашего Учебного Центра – это лучший подарок для тех, кто Вам дорог! Оплате обучение и подарите Вашим родным и близким обучение по любому из курсов!!!

«Сертификат на повторное обучение» дает возможность повторно пройти обучение в нашем Учебном Центре со скидкой 1000 рублей!

А также:


Php как расширить класс


Расширение классов PHP

Когда речь заходит о объектно-ориентированном программировании, в целом класс выполняет определенную задачу, такую ​​как данные пользователя удержания или управление вводом/выводом.

Когда вы разрешите сказать 1 объект, который используется для управления выходом, вы можете установить метод внутри этого объекта для управления типом вывода или как обрабатывать каждый конкретный контент, но это будет означать, что объекты единственные цель была нарушена, так как теперь она не просто отправляет контент, но также манипулирует содержимым в зависимости от его типа.

Способ, которым мы это используем, заключается в группировке набора задач в группу классов/объектов, например:

abstract class Output { public $content_type = 'text/plain'; public function _send(){} }

Класс вывода, очевидно, будет иметь гораздо больше методов, но только методы, связанные с выводом содержимого, такие как заголовки и т.д., а не манипуляция содержимым, тогда у вас будет что-то вроде:

class HTMLOutput extends Output { public $content_type = 'text/html'; }

и для манипулирования содержимым:

class CSSOutput extends Output { public $content_type = 'text/css'; public _send() { if($_SERVER['APP']['Settings']['CSSCompress'] == '1') { $this->_compress_css(); } parent::_send(); } private function _compress_css() { $this->content = ; //Some compression lib } }

Это основные точки архитектуры, которые я соблюдаю при создании и организации многих сгруппированных классов/объектов.

PHP – расширенный __конструкция

Родительский __construct() определенный в классе b, будет запускаться автоматически, если вы создаете экземпляр дочернего класса a, если только не существует __construct() определенный в классе a.

class a extends b { } class b { public function __construct() { echo 'In B Constructor'; } } $x = new a();

Если в классе a определен метод __construct() , это переопределяет использование метода __construct() в классе b …. он будет выполняться вместо метода класса b __construct()

class a extends b { public function __construct() { echo 'In A Constructor'; } } class b { public function __construct() { echo 'In B Constructor'; } } $x = new a();

Поэтому, если ваш дочерний класс имеет определенный __construct() , вам нужно явно вызвать конструктор для родителя, если вы хотите его выполнить.

class a extends b { public function __construct() { parent::__construct(); echo 'In A Constructor'; } } class b { public function __construct() { echo 'In B Constructor'; } } $x = new a();

Я не уверен, что полностью понимаю, что вы просите, но вы можете вызвать метод parent для родительского конструктора

parent::__construct();

Это единственный вариант, о котором я знаю.

Вызов parent::__construct() в a::__construct() :

class a extends b { public function __construct() { parent::__construct(); } public function validateStuff() { $this->insert_record(); } }

Вы можете вообще опустить конструктор, если не делаете никаких конкретных действий.

PHP Как вызвать метод из расширенного класса

Пытаясь использовать объекты, которые расширяют одиночный, но чего я не могу сделать. Как вызвать метод из расширенного класса?

Как показать 13 non 12 с singleton?

class SingletonTest { protected static $_instance; private function __construct(){} private function __clone(){} public static function getInstance() { if (null === self::$_instance) { self::$_instance = new self(); } return self::$_instance; } public function test2(){ return 12; } } class ExtendSingleton extends SingletonTest { public function test2() { return 13; } } $b = ExtendSingleton::getInstance(); echo $b-> test2(); //12

задан Shkarbatov Dmitriy 01 дек. '14 в 22:28

источник поделиться

Как расширить класс PHP с несколькими классами

Мне было интересно, если это был способ получить то, что вы увидите, как

class main_class extends main_class {...}

Но PHP не был счастлив. :(

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

Проблема заключалась в том , из class some_classне позволит вам переопределить существующий класс так , что мне нужно сделать , это использовать __get и __call и добавить еще 2 строки в моей функции __construct.

Так вот мой решил-код:

class main_class { private $_MODS = array(),...; public ...; public function __construct(...) { ... global $MODS_ENABLED; $this -> $_MODS = $MODS_ENABLED; } ... public function __get( $var ) { foreach ( $this->_MODS as $mod ) if ( property_exists( $mod, $var ) ) return $mod -> $var; } public function __call( $method, $args ) { foreach ( $this->_MODS as $mod ) if ( method_exists( $mod, $method ) ) return call_user_method_array( $method, $mod, $args ); } }

Тогда просто запустить эту функцию, чтобы продлить main_class без перекрывая первоначальные функции, поэтому она мне запустить мои новые функции, но если мне нужно, я могу получить оригинальные функции:

$MODS_ENABLED=array(); class mod_mail {...} $MODS_ENABLED[]=new mod_mail;

Теперь давайте загружать наш класс и запустить функцию из нашей моды:

$obj = new main_class(...); $obj -> mail(root@localhost, [email protected], Testing a mod., This email was sent via My main_class but this is a mod that extended main_class without renaming it.);

Хорошо хорошо мой мод не был для отправки электронной почты, но вместо этого перенаправляет поддомены туда псевдонимы пути, но вы понимаете концепцию, показанную здесь.

Edit: После того, как я решил эту проблему , я увидел комментарий говоря возможный дубликат существует , так что я проверить его и выяснить , кто - то имеет очень похожее решение, но , пожалуйста , не пометить его как дубликат , как он просит о добавлении к класс , который уже был построен, я хочу , чтобы переопределить функции при построении. Мое решение принимает массив построенных классов и «слияний» их в мой main_class, этот метод не оставляет за первоначальные функции , но также может вызвать оригинальные функции , используя другую функцию миновать функцию __call.

Благодаря тому, кто разместил ответы.


Смотрите также



Компьютерные курсы по направлениям:

Для начинающих


A

Компьютер для начинающих: Word, Excel, Access и другие программы!

Графические пакеты


B

Популярные пакеты Adobe Photoshop, CorelDraw, ArchiCAD, AutoCAD и другие!

WEB + анимация


C

Курсы по созданию сайтов, WEB-дизайну и крутой анимации в Adobe Flash!

Бухгалтерия + делопроизводство

Сетевые технологии


E

Курсы сборки ПК, системных администраторов и защиты информации!