Merge pull request #1544 from Glutnix/php-late-static-binding

[php/en] Adds late static binding
This commit is contained in:
Levi Bostian 2015-10-18 12:03:02 -05:00
commit 6e3c5d677f

View File

@ -712,6 +712,43 @@ use My\Namespace as SomeOtherNamespace;
$cls = new SomeOtherNamespace\MyClass(); $cls = new SomeOtherNamespace\MyClass();
/**********************
* Late Static Binding
*
* /
class ParentClass {
public static function who() {
echo "I'm a " . __CLASS__ . "\n";
}
public static function test() {
// self references the class the method is defined within
self::who();
// static references the class the method was invoked on
static::who();
}
}
ParentClass::test();
/*
I'm a ParentClass
I'm a ParentClass
*/
class ChildClass extends ParentClass {
public static function who() {
echo "But I'm " . __CLASS__ . "\n";
}
}
ChildClass::test();
/*
I'm a ParentClass
But I'm ChildClass
*/
/********************** /**********************
* Error Handling * Error Handling
* *
@ -727,9 +764,9 @@ try {
// When using try catch blocks in a namespaced enviroment use the following // When using try catch blocks in a namespaced enviroment use the following
try { try {
// Do something // Do something
} catch (\Exception $e) { } catch (\Exception $e) {
// Handle exception // Handle exception
} }
@ -738,13 +775,13 @@ try {
class MyException extends Exception {} class MyException extends Exception {}
try { try {
$condition = true; $condition = true;
if ($condition) { if ($condition) {
throw new MyException('Something just happend'); throw new MyException('Something just happend');
} }
} catch (MyException $e) { } catch (MyException $e) {
// Handle my exception // Handle my exception
} }