PHP高级OOP面向对象基础-多态/魔术方法__toString() 把对象当做字符串输出的时候自动调用 要求该对象必须返回一个子符串 作用: 用来调试 __invoke() 把对象当做函数去调用时 自动触发 __call __callStatic __call($funName, $params) 当调用一个不存在的方法的时候自动调用 参1: 方法名称 参2: 参数 以数组形式 __callStat作者王明昌发布时间2018-01-03文章目录__toString()__invoke()__call __callStatic自动加载类串行化与反串行化文件的写入与取出php 的类型约束多态接口__toString() 把对象当做字符串输出的时候自动调用 要求该对象必须返回一个子符串 作用: 用来调试 __invoke() 把对象当做函数去调用时 自动触发 __call __callStatic __call($funName, $params) 当调用一个不存在的方法的时候自动调用 参1: 方法名称 参2: 参数 以数组形式 __callStatic($funName, $params) 当调用一个不存在的静态方法的时候自动调用 参1 : 不存在的静态方法名称 参2 : 属性 复制class Car { public function A(){ echo "我是方法a"; } public function __call($name, $arguments) { print_r($name); // print_r($arguments); echo "没有此方法"; } } //$a = new Car(); //$a ->A1(99,3); // A1 Array ( [0] => 99 [1] => 3 ) echo ""; class Person { public function A(){ echo "我是方法a"; } public static function __callStatic($name, $arguments) { print_r($name);//show print_r($arguments);//Array ( [0] => 11111 [1] => 2222 ) echo "自动调用魔术方法__callStatic"; } } //静态类型的方法用 类名::方法名 调用 Person::show(11111,2222);//show Array ( [0] => 11111 [1] => 2222 ) 自动加载类 __autoload(他不是一个魔术方法 他是一个函数) 复制//自动加载传来的类 function __autoload($className){ echo "自动加载"; // echo $className;//User if(file_exists('./com/'.$className.'.class.php')){ require './com/'.$className.'.class.php'; }else{ die(404); } } $a = empty($_GET['act'])? 'User': $_GET['act']; echo $a ; $p = new $a; 串行化与反串行化 serialize();串行化 unserialize();反串行化 __sleep() 串行化的时候自动调用 必须返回一个数组 __wakeup() 反串行化的时候自动调用 复制$arr = array('xx','zz','cc'); $a = serialize($arr); echo $a; //a:3:{i:0;s:2:"xx"; i:1;s:2:"zz"; i:2;s:2:"cc";} $b = unserialize($a); print_r($b); //Array ( [0] => xx [1] => zz [2] => cc ) echo ""; class A { public $name; public $age; public function __construct($name,$age) { $this->name = $name; $this->age = $age; } public function __sleep() { echo "串行化时调用"; return array('name','age');//相当于传进来的变量名去$ } public function __wakeup() { echo "反串行化时调用"; } } $z = new A('小小',18); //echo serialize($z); //串行化时调用O:1:"A":2:{s:4:"name";s:6:"小小";s:3:"age";i:18;} echo ""; $zz = serialize($z); $b = unserialize($zz); print_r($b); //串行化时调用反串行化时调用A Object ( [name] => 小小 [age] => 18 ) 文件的写入与取出复制//字符串写入文件及取出 file_put_contents('./1.log',$zz);//写入文件 $aa = file_get_contents('./1.log'); print_r($aa); php 的类型约束 只能用来约束参数的类型, 且只能约束为 <<数组>>或<<对象>> 复制//数组 function A(array $a){ var_dump($a); } $a = A(array('zz','xx','cc')); print_r($a); //array(3) { [0]=> string(2) "zz" [1]=> string(2) "xx" [2]=> string(2) "cc" } //资源 class A{} class B{} class C extends A{} //实例化 $a = new A(); $b = new B(); $c = new C(); //书写方式(类名 此类的实例化名) function B( A $name ){ var_dump($name); } B($c); 多态复制抽象类 和抽象方法 abstract 抽象类 : 1. 抽象类中有抽象方法和普通方法 1. 抽象类不能被实例化 3. 抽象方法: 抽象方法 没有方法体 3. 抽象类里面的抽象方法必须在子类中实现 复制abstract class A { public function aa(){//普通方法 echo "1111"; } abstract public function bb();//没有方法体 } class B extends A { //必须含有抽象类中的方法 public function bb(){ echo '哈哈哈'; } // abstract public function cc();普通类中不能含有抽象方法 } $a = new B; $a -> bb(); //$b = new A; 抽象类不能被实例化 接口 类中的接口 inferface 不是 api 应用接口 接口不能被实例化接口中只 允许有抽象方法和常量接口中的方法不能有方法体 抽象方法的abstract 必须省略接口可以被继承 但是不能使用extends 必须使用implements可以多继承继承接口的子类必须重写方法接口和抽象类的区别抽象类里面的方法可以有普通方法,但是接口里面的方法必须都是抽象方法抽象类中 可以有属性, 但是接口不能有接口可以多继承, 抽象类不能复制interface A { const NAME = 'xx'; public function aa();//不能含有方法体 // public function bb();//不能含有方法体 } interface AA { public function aaa();//不能含有方法体 } class B implements A,AA//接口可以多继承 { public function aa(){ echo '哈哈哈'; } public function aaa(){} } //$a = new A;接口不能被实例化 $a = new B(); $a ->aa(); 多种状态 子类可以继承父类, 可以重写父类的属性和方法 一类可以有多个子类,不同的子类之间,有不同的状态属性 这就是多态 不同的对象 做相同的事情, 得到不同的结果 复制class Meizi { public function meet(Hanzi $obj){ $obj->kiss(); } } interface Hanzi { public function kiss(); } class GFS implements Hanzi { public function kiss(){ echo "我的高富帅,我亲了妹子"; } } $mm = new Meizi; $mm->meet(new GFS);
2018-08-22支付宝支付接口错误说明错误查询 https://docs.open.alipay.com/58/103599/ 今天我遇到的一个错误,经过询问小二,网关错误,错误如下 ILLEGAL_ACCESS_SWITCH_SYSTE
2019-12-10阿里巴巴开源镜像提供的 packagist 镜像服务全局配置(推荐) 所有项目都会使用该镜像地址: composer config -g repo.packagist composer https://mirrors.aliyun.com/compos
2018-08-26实例 | 支付宝支付(使用md5加密)参数的获取 pid|key获取: 商户中心---账户管理---查看pid|key https://openhome.alipay.com/platform/keyManage.htm?keyType=
2018-10-31实例 | tp5使用七牛云上传图片和文件/删除文件thinkphp5中使用七牛云 下载 https://github.com/qiniu/php-sdk vendor文件下 新建文件 application/extra/qiniu.php retur
2018-05-28ajax-post传值的写法var data = {type:type,is_ok:is_ok,id:id}; $("#train").on("click",function(){ var id = $("#id_res").v
2018-05-27Ajax异步搜索内容,并显示使用ajax异步搜索内容,如果符合内容,则一行行的显示,每次查询时清空上次的记录 $("#search").on("click",function(){ var key = $("#keywords"