Saturday, March 24, 2007

PHP5 static property and static function


<?php
class Visibility
{
public $a = "a";
// var is synmic of public.
protected $b = "b";
private $c = "c";
const T = "const";
public static $s = "static";

public function public_func()
{
echo "public function";
echo "<br>";
}

protected function protected_func()
{
echo "protected function";
echo "<br>";
}

private function private_func()
{
echo "private function.";
echo "<br>";
}

public function static_var()
{
echo self::$s;
echo " self::\$s<br><br>";
}

public static function static_func()
{
echo "static function.";
echo "<br>";
echo "can't use \$this.";
echo "<br>";
// echo $this->a;
// Fatal error: Using $this when not in object context
}
}

$v = new Visibility();
echo $v->a;
// echo $v->b; // Fatal error
// echo $v->c; // Fatal error
echo "<br>";
$v->public_func();
// $v->protected_func(); // Fatal error
// $v->private_func(); // Fatal error
// echo Visibility::$a;
// Fatal error: Access to undeclared static property: Visibility::$a
echo Visibility::$s;
echo "<br>";
// echo Visibility::s; //Undefined class constant 's'
echo Visibility::T;
echo "<br>";
echo $v->static_var();
// echo $v->s; // output nothing.
// Static properties cannot be accessed through the object using the arrow operator ->.
$v->static_func(); // Static methods can be accessed through the object using ->.
Visibility::static_func();
// Because static methods are callable without an instance of the object created,
// the pseudo variable $this is not available inside the method declared as static.
echo "<br>==============================<br>";
?>

<?php
class ExVisibility extends Visibility
{
public static $s = "e static";
public function ex_func()
{
echo parent::$s;
echo " parent::\$s<br>";
echo self::$s;
echo " self \$s<br>";
}

}
$e = new ExVisibility();
$e->ex_func();
echo ExVisibility::$s;
echo "<br />";

?>

No comments :