深入php面向对象、模式与实践

深入php面向对象、模式与实践

ID:30826670

大小:568.88 KB

页数:18页

时间:2019-01-03

深入php面向对象、模式与实践_第1页
深入php面向对象、模式与实践_第2页
深入php面向对象、模式与实践_第3页
深入php面向对象、模式与实践_第4页
深入php面向对象、模式与实践_第5页
资源描述:

《深入php面向对象、模式与实践》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、深入php面向对象、模式与实践这篇文章主要介绍了深入php面向对象、模式与实践,需要的朋友可以参考下1语法l.i基础语法clone需耍操作原对象,但又不想影响原对彖.复制代码代码如下:$K_back=clone$K;基本数据类型和数组都为真复制,即为真副本,当属性为对象时,为假复制,改变副本仍会影响原对象.解决方案:〃在原对象中添加function_clone(){$this->对象=clone$this->对象}—clone在clone前自动触发,可以执行一-些在备份前的属性操作.2、&传递引用方法引用传递,改变源对象复

2、制代码代码如下:functionset_K(&$K){...}function&get_K(){...}3、static延迟静态绑定应用场景:Dog类和Person类都需要一个返回实例化的方法,Dog类和Person类都继承于Animal抽彖类.abstractclassAnimal{publicstaticfunctioncreate(){〃实例化调用类returnnewstaticf);}}classPersonextendsAnimal{...}〃返回Person实例化类Person::create();4、拦截器g

3、et($property)/访问未定义的属性时调用.—set($property,$value),给未定义的属性赋值时被调用.—isset($property),对未定义属性调用isset()方法时调用._unset($property),对未定义屈性调用unset()方法时调用._call($methodz$arg_array)3^用未定义方法时调用.-call很有用,但要慎用,因为太灵活.应用场景:有一个专门打印Person类信息的Person_Writer类,如果通过Person类调用Person_Writer类./

4、/Person委托Person_Writer类处理打印事务.classPerson{private$writer;•••function_call($method_name,$args){if(methood_exists($this->wirteG$method_name)){return$this->writer->method_name($this);}}〃高级_call写法,当委托方法参数不确定时使用.function_call($method_name,$args){〃当然这里这样写法意义不大,但是call一般都

5、是用call_user_func_array调用$args=$this;if(methood_exists($this->wirterz$method_name)){returncall_user_func_array(array($this->writer,$method_name)z$args);)}}}5、回调函数应用场景:3个类‘Product类,Product_Sale类,Product_Totalizer类,要实现:当卖出Product总共价格超过指定金额时,输出警告.//ProductclassProduct

6、{public$name;public$price;}//Product_SaleclassProduct_Sale{private$callbacks;〃记录回调函数functionregister_callback($callback){if(!is_callback($callback)){thownewExceptionf'callbacknotcallable');}$this->callbacks[]=$callback;}〃执行回调函数functionsale($product){print,,{$produ

7、ct->name}:处理中H;foreach($this->callbacksas$callback){call_user_func($callback,$product);}}}//Produce_TotalizerclassProduce_Totalizer{staticfunctionwarn_amount($amt){$count=0;returnfunction($produce)use($amt,&count){$count+=$produce->price;printHcount:{count}Hif

8、($count>$amt){print“超过指定金额{$amt}啦J}};}}〃模拟场景$product_sale=newProduce_Sale();〃指定报警金额为8块$product_sale=register_callback(Produce_Totalizer::warn_amount(8))

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。