} catch (LocalNonException $e) { print "HERE\n"; } catch (UndefinedClass $e) { print "HERE\n"; } catch (OutOfBoundsException $e) { print "HERE\n"; } catch (\OutOfBoundsException $e) { print "HERE\n"; } } } class LocalException extends \Exception { } class LocalSubException extends LocalException { } class LocalSubSubException extends LocalSubException { } class LocalNonException { } function something_that_might_break() { print __METHOD__; throw new \Exception('a,a,'); } $f = new foo(); $f->test();
echo "Bar::testPrivate\n"; } } class Foo extends Bar { public function testPublic() { echo "Foo::testPublic\n"; } private function testPrivate() { echo "Foo::testPrivate\n"; } } $myFoo = new foo(); $myFoo->test(); // Bar::testPrivate // Foo::testPublic /** Объекты одного типа имеют доступ к элементам с модификаторами private и protected друг друга, даже если не являются одним и тем же экземпляром. Это объясняется тем, что реализация видимости элементов известна внутри этих объектов. Пример #3 Доступ к элементам с модификатором private из объектов одного типа */ class Test { private $foo; public function __construct($foo) { $this->foo = $foo;
<?php class foo { public function test(&$x) { static $lambda; $lambda = function &() use(&$x) { return $x = $x * $x; }; return $lambda(); } } $test = new foo(); $y = 2; var_dump($test->test($y)); var_dump($x = $test->test($y)); var_dump($y, $x);
function test_bar() { var_dump(get_parent_class()); } } class goo extends bar { function test_goo() { var_dump(get_parent_class()); } } $bar = new bar(); $foo = new foo(); $goo = new goo(); $foo->test(); $bar->test(); $bar->test_bar(); $goo->test(); $goo->test_bar(); $goo->test_goo(); var_dump(get_parent_class($bar)); var_dump(get_parent_class($foo)); var_dump(get_parent_class($goo)); var_dump(get_parent_class("bar")); var_dump(get_parent_class("foo")); var_dump(get_parent_class("goo")); var_dump(get_parent_class("i")); var_dump(get_parent_class("")); var_dump(get_parent_class("[[[[")); var_dump(get_parent_class(" "));
function d() { $obj = new foo(); return $obj->test(); }
<?php class foo { public function test() { call_user_func(array('FOO', 'ABC')); call_user_func(array($this, 'ABC')); foo::XYZ(); self::WWW(); call_user_func('FOO::ABC'); } function __call($a, $b) { print "__call:\n"; var_dump($a); } public static function __callStatic($a, $b) { print "__callstatic:\n"; var_dump($a); } } $x = new foo(); $x->test(); $x::A(); foo::B(); $f = 'FOO'; $f::C(); $f::$f(); foo::$f();
<?php class foo { const AAA = 'x'; const BBB = 'a'; const CCC = 'a'; const DDD = self::AAA; private static $foo = array(self::BBB => 'a', self::CCC => 'b', self::DDD => self::AAA); public static function test() { self::$foo; } } foo::test(); print 1;
test_class::test_func4(); } else { echo "test_func4 isn't callable from child\n"; } } } $object = new test_class(); $object->test(); if (is_callable(array($object, 'test_func1'))) { $object->test_func1(); } else { echo "test_func1 isn't callable from outside\n"; } if (is_callable(array($object, 'test_func2'))) { $object->test_func2(); } else { echo "test_func2 isn't callable from outside\n"; } if (is_callable(array('test_class', 'test_func3'))) { test_class::test_func3(); } else { echo "test_func3 isn't callable from outside\n"; } if (is_callable(array('test_class', 'test_func4'))) { test_class::test_func4(); } else { echo "test_func4 isn't callable from outside\n"; } $object = new foo(); $object->test();
<?php class bar { } class foo { public function test() { class_alias('bar', 'static'); return new static(); } } $a = new foo(); var_dump($a->test());