//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";