PHP面向对象常用关键字整理

常见关键字
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();


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值