Suppose you have Class A, B, Base,a, b all inherit base,
A, B allows a method initialize ();
If New N times:
$obj = new A ();
$obj = new A ();
$obj = new A ();
$obj = new B ();
$obj = new B ();
$obj = new B ();
Executes only once a->initialize (); And once B->initialize ();
Initialize is primarily an alternative to the __construct approach in the framework.
Phalcon implements this function, but Phalcon is the framework written by C, can pure PHP achieve this effect?
Reply to discussion (solution)
Class Bass { function __construct () { $this->_initialize (); } function _initialize () { static $v; @ $v + +; if ($v = = 1 && method_exists ($this, ' Initialize ')) $this->initialize (); }} Class A extends Bass { function initialize () { echo __class__; }} Class B extends Bass { function initialize () { echo __class__; }} $obj = new A (), $obj = new A (), $obj = new A (), $obj = new B (), $obj = new B (); $obj = new B ();
Ab
Class Bass { function __construct () { $this->_initialize (); } function _initialize () { static $v; @ $v + +; if ($v = = 1 && method_exists ($this, ' Initialize ')) $this->initialize (); }} Class A extends Bass { function initialize () { echo __class__; }} Class B extends Bass { function initialize () { echo __class__; }} $obj = new A (), $obj = new A (), $obj = new A (), $obj = new B (), $obj = new B (); $obj = new B ();
Ab
@ $v + +;
Why do you want to add "@" in accordance with this sentence?