<?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();
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.
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
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