3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Ancestor { public $publicVar = "ancestor's public var\n"; static $staticVar = "ancestor's static var\n"; function publicMethod(){ echo "ancestor's publicMethod "; // is $this is set up if(isset($this)){ echo "is in object context\n"; }else{ echo "is in static context\n"; } } static function staticMethod(){ echo "ancestor's staticMethod "; // is $this is set up if(isset($this)){ echo "in object context\n"; }else{ echo "in static context\n"; } } } class Descendant extends Ancestor { public $publicVar = "descendant's public var\n"; static $staticVar = "descendant's static var\n"; function publicMethod(){ echo "descendant's publicMethod "; // is $this is set up if(isset($this)){ echo "in object context\n"; }else{ echo "in static context\n"; } } static function staticMethod(){ echo "descendant's staticMethod\n"; // is $this is set up if(isset($this)){ echo "in object context\n"; }else{ echo "in static context\n"; } } } $ancestor = new Ancestor(); $descendant = new Descendant(); // From Outside Of An Instance/Class: // access to properties echo $descendant->publicVar; // descendant's public var echo $descendant->staticVar; // "" + notice: Undefined property: Descendant::$staticVar echo $descendant::$staticVar; // descendant's static var //echo $descendant::$publicVar; // fatal error: Access to undeclared static property: Descendant::$publicVar //echo Ancestor::$publicVar; // fatal error: Access to undeclared static property echo Ancestor::$staticVar; //ancestor's static var //echo Descendant::$publicVar; // fatal error: Access to undeclared static property echo Descendant::$staticVar; // descendant's static var // access to methods $descendant->publicMethod(); $descendant->staticMethod(); $descendant::staticMethod(); $descendant::publicMethod(); //Ancestor::publicMethod();
Output for 8.0.0 - 8.0.30, 8.1.0 - 8.1.28, 8.2.0 - 8.2.18, 8.3.0 - 8.3.4, 8.3.6
descendant's public var Notice: Accessing static property Descendant::$staticVar as non static in /in/6pbGV on line 57 Warning: Undefined property: Descendant::$staticVar in /in/6pbGV on line 57 descendant's static var ancestor's static var descendant's static var descendant's publicMethod in object context descendant's staticMethod in static context descendant's staticMethod in static context Fatal error: Uncaught Error: Non-static method Descendant::publicMethod() cannot be called statically in /in/6pbGV:70 Stack trace: #0 {main} thrown in /in/6pbGV on line 70
Process exited with code 255.
Output for 8.3.5
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0 descendant's public var Notice: Accessing static property Descendant::$staticVar as non static in /in/6pbGV on line 57 Warning: Undefined property: Descendant::$staticVar in /in/6pbGV on line 57 descendant's static var ancestor's static var descendant's static var descendant's publicMethod in object context descendant's staticMethod in static context descendant's staticMethod in static context Fatal error: Uncaught Error: Non-static method Descendant::publicMethod() cannot be called statically in /in/6pbGV:70 Stack trace: #0 {main} thrown in /in/6pbGV on line 70
Process exited with code 255.
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.25, 7.2.0 - 7.2.33, 7.3.0 - 7.3.31, 7.4.0 - 7.4.33
descendant's public var Notice: Accessing static property Descendant::$staticVar as non static in /in/6pbGV on line 57 Notice: Undefined property: Descendant::$staticVar in /in/6pbGV on line 57 descendant's static var ancestor's static var descendant's static var descendant's publicMethod in object context descendant's staticMethod in static context descendant's staticMethod in static context Deprecated: Non-static method Descendant::publicMethod() should not be called statically in /in/6pbGV on line 70 descendant's publicMethod in static context
Output for 7.3.32 - 7.3.33
descendant's public var descendant's static var ancestor's static var descendant's static var descendant's publicMethod in object context descendant's staticMethod in static context descendant's staticMethod in static context descendant's publicMethod in static context
Output for 5.4.1 - 5.4.45, 5.5.24 - 5.5.35, 5.6.8 - 5.6.28
descendant's public var Strict Standards: Accessing static property Descendant::$staticVar as non static in /in/6pbGV on line 57 Notice: Undefined property: Descendant::$staticVar in /in/6pbGV on line 57 descendant's static var ancestor's static var descendant's static var descendant's publicMethod in object context descendant's staticMethod in static context descendant's staticMethod in static context Strict Standards: Non-static method Descendant::publicMethod() should not be called statically in /in/6pbGV on line 70 descendant's publicMethod in static context

preferences:
217.36 ms | 403 KiB | 242 Q