常见关键字
final关键字
一般用于父类中,当子类重写或者覆盖父类的时候,直接会报错
所以不允许再被重写,和继承,防止功能上的感染。
final不能修饰成员属性,只能修饰方法和类
如果class上面添加上final会断子绝孙,不会继承
1,为了安全
2,没有必要
平常的变量是保存在堆中的
2,静态的成员属性类名::$成员属性名称,切记不能使用$this
3,输出static的内容: echo Preson::$name
4,静态的成员属性效率较高,因为不必需要实例化成对象,不用开辟空间
5,在内部输出静态变量的时候尽量用self::$name;防止静态变量名被改变
在外部输出静态变量的时候尽量用类名::$name; 例如Person::$name
6,多个对象访问的静态成员属性是同一个(共享同一个静态成员属性)
静态的成员方法中,不允许有非静态的内容$this;
必须要记住的下面
7,静态的成员方法在类的内部使用$this调用
8,静态成员方法在类的内部可以使用self::$name;
9, 静态的成员方法在类的外部可以使用对象调用
10,静态的成员方法在类的外部可以使用类名::方法名()调用
11,静态的成员方法中不允许有$this;
12,推荐使用类名调用,效率较高
13,静态的成员方法在类的外部都可以使用类名::方法名()调用
14,成员方法中如果没有包含任何的$this,该方法默认的成员静态方法
1,在类的外部禁止实例化对象(构造方法私有化)
2,声明一个方法,在该方法当中实例化对象
3,判断该对象是否已经产生
4,如果没有对象产生,将产生的对象存入至一个共享的静态成员属性当中
final关键字
一般用于父类中,当子类重写或者覆盖父类的时候,直接会报错
所以不允许再被重写,和继承,防止功能上的感染。
final不能修饰成员属性,只能修饰方法和类
如果class上面添加上final会断子绝孙,不会继承
1,为了安全
2,没有必要
statci关键字(面试经常)
1,static是静态的,保存在内存中的初始化静态段中。不能使用$this访问平常的变量是保存在堆中的
2,静态的成员属性类名::$成员属性名称,切记不能使用$this
3,输出static的内容: echo Preson::$name
4,静态的成员属性效率较高,因为不必需要实例化成对象,不用开辟空间
5,在内部输出静态变量的时候尽量用self::$name;防止静态变量名被改变
在外部输出静态变量的时候尽量用类名::$name; 例如Person::$name
6,多个对象访问的静态成员属性是同一个(共享同一个静态成员属性)
静态的成员方法中,不允许有非静态的内容$this;
必须要记住的下面
7,静态的成员方法在类的内部使用$this调用
8,静态成员方法在类的内部可以使用self::$name;
9, 静态的成员方法在类的外部可以使用对象调用
10,静态的成员方法在类的外部可以使用类名::方法名()调用
11,静态的成员方法中不允许有$this;
12,推荐使用类名调用,效率较高
13,静态的成员方法在类的外部都可以使用类名::方法名()调用
14,成员方法中如果没有包含任何的$this,该方法默认的成员静态方法
单态设计模式
思考:怎么避免在类的外部实例化多个对象1,在类的外部禁止实例化对象(构造方法私有化)
2,声明一个方法,在该方法当中实例化对象
3,判断该对象是否已经产生
4,如果没有对象产生,将产生的对象存入至一个共享的静态成员属性当中
5,如果对象已经实例化过,这个静态的成员属性当中会保存对象,直接将对象返回即可。
<?php
header("content-type:text/html;charset=utf-8");
//设计模式
//单态设计模式
// 思考:怎么避免在类的外部实例化多个对象
// 1,在类的外部禁止实例化对象(构造方法私有化)
// 2,声明一个方法,在该方法当中实例化对象
// 3,判断该对象是否已经产生
// 4,如果没有对象产生,将产生的对象存入至一个共享的静态成员属性当中
// 5,如果对象已经实例化过,这个静态的成员属性当中会保存对象,直接将对象返回即可。
//Person只能实例化一次
//不能两次实例化
class Person{
//用来保存实例化好的对象
static public $obj=null;
public $name;
private function __construct($name){
$this->name=$name;
}
static public function getObj($name){
//判断该类的对象是否存在
if(is_null(self::$obj)){
//如果没有保存,就保存上
self::$obj=new self($name);
}
return self::$obj;
}
public function hao(){
echo $this->name;
}
}
$obj1=Person::getObj("xiaoyu");
var_dump($obj1);
$obj2=Person::getObj("zhenyu");
var_dump($obj2);
$obj3=Person::getObj("libai");
var_dump($obj3);
/*
输出:
object(Person)#1 (1) {
["name"]=>
string(6) "xiaoyu"
}
object(Person)#1 (1) {
["name"]=>
string(6) "xiaoyu"
}
object(Person)#1 (1) {
["name"]=>
string(6) "xiaoyu"
}
*/
<?php
header("content-type:text/html;charset=utf-8");
//static类
class Person{
static public $name;
//静态的成员方法当中不允许拥有非静态的元素($this)
static public function hao(){
echo self::$name;
//输出静态成员属性的值
}
public function test(){
//静态成员方法可以在类的内部通过$this来调用
//$this->hao();
self::hao();
}
public function abc(){
echo 123;
}
}
$p=new Person; //开辟了第一块空间
Person::$name="zhenyu";//将Person赋值为zhenyu
$p->hao(); // 在类的外部调用静态的成员方法可以使用对象调用
$p->test();
Person::hao();
// Person::abc(); PHP5,3版本就会报错
<?php
header("content-type:text/html;charset=utf-8");
//static关键字
//多个对象共享一个静态成员属性
class Person{
static public $name;
public function hao(){
echo self::$name;
//输出静态成员属性的值
}
}
$p=new Person; //开辟了第一块空间
Person::$name="zhenyu";//将Person赋值为zhenyu
$h=new Person;
Person::$name="xiaoyu";//开辟了第二块空间,赋值xiaoyu
$h->hao(); // 输出xiaoyu
echo "<br/>";
$p->hao(); // 输出xiaoyu
//多个对象共享一个静态成员属性
<?php
header("content-type:text/html;charset=utf-8");
//static关键字
class Person{
static $name="libai";
public function hao(){
echo self::$name;
//类的内部使用self调用
// echo $this->name;这样是调用失败的
}
}
$p=new Person;
Person::$name="zhenyu";
$p->hao(); //输出zhenyu
// 输出格式Person::$name;
echo "<br/>";
$h=new Person;
Person::$name="xiaoyu";
$h->hao();//输出xiaoyu
<?php
header("content-type:text/html;charset=utf-8");
//final关键词,父类使用的时候,不允许子类覆盖和重写,保护父类不被污染
class Person{
//如果不加关键字final
//$p->hao();
//输出dufu 30
//添加关键字final后
//输出直接报错,不允许重载,不能继承
//如果class上面添加上final会断子绝孙,不会继承
public $name="libai";
public $age="22";
public function hao(){
echo "我是".$this->name."性别".$this->age."<hr/>";
}
}
class student extends Person{
// public $name="dufu";
// public $age="30";
public function hao(){
echo "我是".$this->name."性别".$this->age."<hr/>";
}
}
$p=new student;
$p->hao();