final
1.final不能修饰成员属性
2.final只能修饰类和方法
作用:使用final修饰的类不能被子类继承,使用final修饰的方法不能被子类去覆盖
static
1.使用static可以修饰成员属性和成员方法,不能修饰类
2.用static修饰的成员属性,可以被同一个类的所以对象共享
2.静态的数据是存在内存中数据段中(初始化静态段)
4.静态的数据是在类第一次加载时分配到内存中,以后在用到类时就直接从数据段中获取
注意:静态的成员都要使用类名去访问,不用创建对象,不用对象去访问
类名::$静态成员
如果在类中使用静态成员,使用 self代表本类($this)
5.静态方法,不能访问非静态成员。因为非静态成员,就必须通过实例对象去访问。如果你确定一个方法不使用非静态的成员,则可以将这个方法声明为静态方法(不需要实例,直接使用类名就可以使用)
<?php
//面向对象-----封装、继承
header('content-type:text/html;charset=utf-8');
class Person{
private $name;
private $sex;
private $age;
static $country;
//构造方法魔术方法 php5
function __construct($name,$sex,$age,$country="中国"){
$this->name= $name;
$this->sex= $sex;
$this->age= $age;
self::$country = $country;
}
function say(){
echo "我的名字:$this->name ,我的年纪:$this->age ,我的性别:$this->sex 。<br>".self::$country;
$this->run();
}
static function run(){
echo "run=======";
}
}
$person = new Person("张三","男","30","美国");
echo "$person->name".'<br>';
echo Person::run();
echo Person::$country;
const
1.他只能修饰成员属性
2.类中声明常量属性使用const
3.命名方式和我们以前学习define一样的效果
4.访问方式和static静态成员属性是一样(在类外部使用 类名::常量,在类内部使用 self::常量)
5.常量一定要在声明的时候赋值