//var_dump(M::'psf'()); // but not string literal var_dump(M::$psProp); // okay to access static property via class, but leading $ needed!! $memName = '$psProp'; //var_dump(M::$memName);// Access to undeclared static property: M::$memName //var_dump(M::memName);// Undefined class constant 'memName' var_dump(M::MYPI); // okay to access const via class $memName = 'MYPI'; //var_dump(M::$memName); // Access to undeclared static property: M::$memName $clName = "M"; var_dump($clName::MYPI); // okay to use a string containing class name //var_dump("M"::MYPI); // but not the literal form echo "-----------------------------\n"; var_dump(P::psf()); // okay to access static method via class var_dump(P::$psProp); // okay to access static property via class, but leading $ needed!! var_dump(P::MYPI); // okay to access const via class $clName = "P"; var_dump($clName::MYPI); // okay to use a string containing class name echo "-----------------------------\n"; P::f1(); echo "-----------------------------\n"; $m = new M(); $n = new N(); $p = new P(1000); echo "-----------------------------\n";