static.php
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>9 类中静态成员的创建与访问技巧:static</title>
</head>
<body>
static.php
<?php
class Father
{
//访问控制符:指示类成员在哪里可以被访问:public/private/protected
//(跟上面相对应的)成员状态符:指示如何访问该成员:静态self/parent/static 非静态:$this->
public static $name = 'peter';//公共静态属性,类内部/外部/子类均可访问 //代码意思:加一些访问限制,内部属性访问控制设置成public,它的成员状态是static
private static $age = 28;//私有静态属性,只能在类内部访问 //它的访问控制设置成(private)私有的
protected static $salary = 3600;//受保护的静态属性,可以在类内部和子类中访问 //它的访问控制设置成(protected)受保护的
public static function show ()//静态方法
{
//静态属性只允许在静态方法中访问;静态方法不允许使用伪变量$this->,因为静态方法是被所有类示例所共享的,不需要对象引用,所以$this不能使用
//双冒号是叫范围解释操作符也叫范围符(self::加属性名), 属性名前一定要加$
return '年龄:'.self::$age.'---'.'工资:'.self::$salary;
}
}
//创建子类Son,继承自Father类
class Son extends Father
{
public static function display()
{
//写一个静态公共方法,在该方法中输出一下父类中受保护的静态属性(salary)
//parent::引用父类中的静态成员
return '工资是:'.parent::$salary;
}
}
//注意在类的外面访问静态属性,要用到类名::加属性($name)
echo '姓名是:'.Father::$name;//姓名是:peter //外部访问静态成员,使用类名::静态成员,静态属性必须要加$符号
//静态成员(包括静态属性和静态方法)
echo '<hr>';
echo Father::show();//年龄:28---工资:3600 //访问类中的静态方法
echo '<hr>';
echo Son::show();//年龄:28---工资:3600 //用子类访问父类中的静态方法
echo '<hr>';
echo Son::display();//工资是:3600 //访问子类的静态方法
//创建一个对象
$obj = new Father;
echo $obj->show();//外部使用对象,也可以访问静态方法
//echo $obj->$name; //会报错 //外部对象不能访问类中的静态属性
//instanceof检测一个对象是否是某一个类的实例,返回值是布尔值true和false
echo '<hr>';
$res = $obj instanceof Father;
echo '$obj是Father类的实例吗?'.($res ? '是的' : '不是的');//$obj是Father类的实例吗?是的
<script></script>
</body>
</html>