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 "; // is $this is set up if(isset($this)){ echo "in object context\n"; }else{ echo "in static context\n"; } } function callToPropertiesFromPublicContext(){ echo $this->publicVar; // descendant's public var //echo $this->staticVar; // "" + notice: Undefined property: Descendant::$staticVar //echo $this::$publicVar; // fatal error: Access to undeclared static property: Descendant::$publicVar echo $this::$staticVar; // descendant's static var //echo Descendant::$publicVar; // fatal error: Access to undeclared static property: Descendant::$publicVar echo Descendant::$staticVar; // descendant's static var } static function callToPropertiesFromStaticContext(){ //echo Descendant::$publicVar; // fatal error: Access to undeclared static property: Descendant::$publicVar echo Descendant::$staticVar; // descendant's static var } function callMethodsFromPublicContext() { $this->publicMethod(); // descendant's publicMethod in object context $this->staticMethod(); // descendant's staticMethod in static context $this::publicMethod(); // descendant's publicMethod in static context $this::staticMethod(); // descendant's staticMethod in static context Descendant::publicMethod(); // descendant's publicMethod in static context Descendant::staticMethod(); // descendant's staticMethod in static context } static function callMethodsFromStaticContext() { Descendant::publicMethod(); // descendant's publicMethod in static context Descendant::staticMethod(); // descendant's staticMethod in static context } } $ancestor = new Ancestor(); $descendant = new Descendant(); echo "\n1. From Outside Of An Instance/Class:\n"; echo "\n----- 1.1 access to properties -----\n"; echo $descendant->publicVar; // descendant's public var //echo $descendant->staticVar; // "" + notice: Undefined property: Descendant::$staticVar //echo $descendant::$publicVar; // fatal error: Access to undeclared static property: Descendant::$publicVar echo $descendant::$staticVar; // descendant's static var //echo Descendant::$publicVar; // fatal error: Access to undeclared static property echo Descendant::$staticVar; // descendant's static var echo "\n----- 1.2 access to methods -----\n"; $descendant->publicMethod(); // descendant's publicMethod in object context $descendant->staticMethod(); // descendant's staticMethod in static context $descendant::publicMethod(); // descendant's publicMethod in static context $descendant::staticMethod(); // descendant's staticMethod in static context Descendant::publicMethod(); // descendant's publicMethod in static context Descendant::staticMethod(); // descendant's staticMethod in static context echo "\n2. From Inside Of An Instance/Class:\n"; echo "\n----- 2.1 access to properties from public context -----\n"; $descendant->callToPropertiesFromPublicContext(); echo "\n----- 2.1 access to properties from static context -----\n"; $descendant->callToPropertiesFromStaticContext(); echo "\n----- 2.1 access to methods from public context -----\n"; $descendant->callMethodsFromPublicContext(); echo "\n----- 2.1 access to methods from static context -----\n"; $descendant->callMethodsFromStaticContext();
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.6
1. From Outside Of An Instance/Class: ----- 1.1 access to properties ----- descendant's public var descendant's static var descendant's static var ----- 1.2 access to methods ----- descendant's publicMethod in object context descendant's staticMethod in static context Fatal error: Uncaught Error: Non-static method Descendant::publicMethod() cannot be called statically in /in/Ff81g:96 Stack trace: #0 {main} thrown in /in/Ff81g on line 96
Process exited with code 255.
Output for 7.0.0 - 7.0.20, 7.1.0 - 7.1.20, 7.2.0 - 7.2.33, 7.3.16 - 7.3.31, 7.4.0 - 7.4.33
1. From Outside Of An Instance/Class: ----- 1.1 access to properties ----- descendant's public var descendant's static var descendant's static var ----- 1.2 access to methods ----- descendant's publicMethod in object context descendant's staticMethod in static context Deprecated: Non-static method Descendant::publicMethod() should not be called statically in /in/Ff81g on line 96 descendant's publicMethod in static context descendant's staticMethod in static context Deprecated: Non-static method Descendant::publicMethod() should not be called statically in /in/Ff81g on line 99 descendant's publicMethod in static context descendant's staticMethod in static context 2. From Inside Of An Instance/Class: ----- 2.1 access to properties from public context ----- descendant's public var descendant's static var descendant's static var ----- 2.1 access to properties from static context ----- descendant's static var ----- 2.1 access to methods from public context ----- descendant's publicMethod in object context descendant's staticMethod in static context descendant's publicMethod in object context descendant's staticMethod in static context descendant's publicMethod in object context descendant's staticMethod in static context ----- 2.1 access to methods from static context ----- Deprecated: Non-static method Descendant::publicMethod() should not be called statically in /in/Ff81g on line 75 descendant's publicMethod in static context descendant's staticMethod in static context
Output for 7.3.32 - 7.3.33
1. From Outside Of An Instance/Class: ----- 1.1 access to properties ----- descendant's public var descendant's static var descendant's static var ----- 1.2 access to methods ----- descendant's publicMethod in object context descendant's staticMethod in static context descendant's publicMethod in static context descendant's staticMethod in static context descendant's publicMethod in static context descendant's staticMethod in static context 2. From Inside Of An Instance/Class: ----- 2.1 access to properties from public context ----- descendant's public var descendant's static var descendant's static var ----- 2.1 access to properties from static context ----- descendant's static var ----- 2.1 access to methods from public context ----- descendant's publicMethod in object context descendant's staticMethod in static context descendant's publicMethod in object context descendant's staticMethod in static context descendant's publicMethod in object context descendant's staticMethod in static context ----- 2.1 access to methods from static context ----- descendant's publicMethod in static context descendant's staticMethod in static context
Output for 5.4.1 - 5.4.45, 5.5.24 - 5.5.35, 5.6.8 - 5.6.28
1. From Outside Of An Instance/Class: ----- 1.1 access to properties ----- descendant's public var descendant's static var descendant's static var ----- 1.2 access to methods ----- descendant's publicMethod in object context descendant's staticMethod in static context Strict Standards: Non-static method Descendant::publicMethod() should not be called statically in /in/Ff81g on line 96 descendant's publicMethod in static context descendant's staticMethod in static context Strict Standards: Non-static method Descendant::publicMethod() should not be called statically in /in/Ff81g on line 99 descendant's publicMethod in static context descendant's staticMethod in static context 2. From Inside Of An Instance/Class: ----- 2.1 access to properties from public context ----- descendant's public var descendant's static var descendant's static var ----- 2.1 access to properties from static context ----- descendant's static var ----- 2.1 access to methods from public context ----- descendant's publicMethod in object context descendant's staticMethod in static context descendant's publicMethod in object context descendant's staticMethod in static context descendant's publicMethod in object context descendant's staticMethod in static context ----- 2.1 access to methods from static context ----- Strict Standards: Non-static method Descendant::publicMethod() should not be called statically in /in/Ff81g on line 75 descendant's publicMethod in static context descendant's staticMethod in static context

preferences:
199.94 ms | 405 KiB | 227 Q