## 1.构造方法
~~~
public function __construct($name,$age){
};
~~~
## 2.析构方法(使用unset删除时会执行)
~~~
public function __destruct(){
echo '我被删除了';
}
~~~
## 3.魔术方法
~~~
public function __get($param){
return $this->$param;
}
~~~
>定义一个get魔术方法(用于读取)
~~~
public function __set($param,$value){
if($param == 'age'){
if($value>0){
$this->$param = $value;
}
}
}
~~~
>定义一个set魔术方法(用于写入)
~~~
public function __isset($param){
return isset($this->$param);
}
~~~
>定义一个isset魔术方法(用于判断对象中非共有属性是否存在)
~~~
public function __unset($param){
unset($this->$param);
}
~~~
>定义一个unset魔术方法(用于销毁一个对象的非共有属性)
判断一个对象中属性是否存在
~~~
if(isset($object->name)){};
~~~
销毁一个对象中私有属性
~~~
unset($object->name);
~~~
* * * * *
~~~
public function __call($name,$param){
echo '你调用的方法$name不存在';
echo '你本次调用的参数为';
print_r($param);
}
~~~
>当一个方法不存在时自动使用此魔术方法
~~~
public function __autoload($classname){
$str = $classname.'.class.php';
if(file_exists($str)){
require($str);
}
}
~~~
>自动加载函数
>当实例化一个不存在的类时会自动使用此方法
## 4.继承一个类
~~~
class B extends A{}
~~~
## 5.使用父级函数
~~~
parent::__construct($name,$age);
~~~
## 6.静态方法或属性
~~~
public static $name = '';
public static function index(){}
~~~
## 7.调用当前类的静态方法
~~~
self::index();
~~~
## 8.修饰符
~~~
final //不可覆盖或继承
~~~
## 9.单例设计
~~~
class Mysql{
//定义一个静态属性用于判断
static public $link = null;
protected function __construct(){
echo '数据库连接成功';
}
//定义静态方法
static public function getConnect(){
//判断属性是否为空
if(is_null(self::$link)){
//是为空则赋值当前对象
self::$link = new Mysql;
}
return self::$link;
}
}
$db = Mysql::getConnect();
$a = clone $db;
if($db === $a){
echo 'Y';
}else{
echo 'N';
}
~~~
## 10.类中的常亮
~~~
//定义常亮
const CEO = '首席执行官';
//类中使用常亮
self::CEO;
//对象中使用常亮
A::CEO;
~~~
## 11.判断一个变量是否属于一个类
~~~
if($变量 instanceof A){}
~~~
## 12.克隆一个对象
~~~
$s2 = clone $s1; //相当于换了一个名字
~~~
## 13.类型约束
~~~
class A{
public function fun(B $a){
echo 'ok';
}
}
$b = new B();
$a = new A();
$a->fun($b);
~~~
>规定的参数必须是B类的对象或者子对象
## 14.抽象类
~~~
//语法
abstract class A{
//抽象方法
public abstract function func3($name,$age);
}
//继承一个类完成未完成的方法
class B extends A{
public function func3($name,$age){
}
}
~~~
>子类必须完成父类的方法
## 15.接口
~~~
//语法
interface A{
//抽象方法
public function fun1();
}
//定义一个抽象类
abstract class B implements A{
//这里是中层领导
}
//定义一个普通类
class C extends B{
//去完成老大的方法
public function fun1(){
echo "完成后的方法";
}
}
~~~
>第二步或第三步之间必须完成方法才可使用(第三步可不写)
## 16.封装_继承_多态
~~~
//定义一个主要类
class A{
//必须要通过一个接口才可运行
public function running(PCI $pci){
//开启
$pic->start();
//关闭
$pic->stop();
}
}
//定义PCI接口(这个接口是提供给子抽象类的接口)
interface PCI{
//定义开启和关闭的方法
public function start();
public function stop();
}
//继承PCI接口制作抽象类
class aaa implements PCI{
public function start(){
echo "启动了";
}
public function stop(){
echo "停止了";
}
}
//创建一个主对象(必须)
$m = new A();
//创建一个抽象对象(相当于一个功能)
$n = new aaa();
//让$n在$m上运行
$m->running($n);
~~~