This article illustrates the difference between the new static () and the New self () in PHP, and believes that it will help you to learn the PHP program.
The cause of the problem is to build a local station. Found in PHP 5.2 can not build up, the station PHP code inside there are many more than 5.3 parts, requirements change in 5.2 to run.
Instead of finding a place,
return new static ($val);
This is a god horse, I saw
So the internet looked up the difference between the two of them.
Self-This is the class, which is the class within the code snippet.
Static-php 5.3 Added to the current class, a bit like the meaning of $this, extracted from the heap memory, access to the current instantiation of the class, then static represents that class.
Or look at the foreigner's professional explanation:
Self refers to the same class whose method the new operation takes place in.
Static in PHP 5.3 's late static bindings refers to whatever class in the hierarchy of the call the "method" on.
In the following example, B inherits both methods from a. Self are bound to a because it's defined in a ' s implementation of The the whereas static is bound to the called Class (also and the Get_called_class ()).
Class A {public
static function get_self () {return
new self ();
}
public static function Get_static () {return
new static ();
}
}
Class B extends a {}
echo Get_class (B::get_self ());//A
echo get_class (B::get_static ());//b
echo Get_cla SS (A::get_static ()); A
This example is basically a look at it.
Principle to understand, but the problem has not been resolved, how to solve the return of the new Static ($val); What about the problem?
In fact, it is simple to use Get_class ($this); The code is as follows:
Class A {public
function create1 () {
$class = Get_class ($this);
return new $class ();
}
Public Function Create2 () {return
new static ();
}
}
Class B extends A {
}
$b = new B ();
Var_dump (Get_class ($b->create1 ()), Get_class ($b->create2 ()));
/* The result
string (1) "B"
string (1) "B"
* *
Interested friends can test the sample code, I believe there will be a new harvest!