PHP之类补充
来源:互联网 发布:ubuntu安装xwindow 编辑:程序博客网 时间:2024/06/10 20:13
最终类与最终方法
如果父类中的方法被声明为 final,则子类无法覆盖该方法。如果一个类被声明为 final,则不能被继承。
final class a{}class a{ final public function A(){}}
抽象类与抽象方法
abstract class a { public abstract function func();}class A extends a{ public function func(){}}
- 一个类可以使用abstract声明为抽象类;抽象类是不能实例化的类,只用作其他类的父类。
abstract class name{} - 一个方法可以使用abstract声明为抽象方法;抽象方法只需要声明方法头,不需要大括号部分的方法体。
abstract public function name($val); - 一个类中有抽象方法,则该类必须声明为抽象类。
- 子类继承自一个抽象类,则子类不行实现父类中的所有抽象方法,除非子类也继续作为抽象类。
- 子类实现抽象父类的方法时,访问控制符范围不能降低,且方法的参数也必须一致(重写)。
接口
接口可以看作是抽象类的更高层面的抽象,可以说是抽象类的特例
interface a{ function func();}class A implements a { function func(){}}
类:属性、类常量、方法
抽象类:属性、类常量、抽象方法
接口:接口常量、抽象方法
相比抽象类,接口可实现’多继承‘
class A implements a,b,c{}
一个接口只能继承一个接口
interface a extends b{}
其中方法都是抽象方法不用abstract修饰,即下级类要么实现接口的方法(implements),要么也声明为抽象方法
重载技术
- 属性重载:如果使用一个不存在的属性,就会调用类中预先定义好的某个方法以处理数据;
对于属性不用的应用场景,做如下处理
- 取值:自动调用类中的__get()
- 赋值:自动调用类中的__set()
- 判断是否存在:自动调用类中的__isset()
- 销毁:自动调用类中的__unset()
- 前提是预先定义好这些方法,否则会报错
<?phpclass bee{ public $ol = array(); public function __get($key){ if(isset($this->ol[$key])){ return $this->ol[$key]; } return $key.' not exists'; } public function __set($key,$val){ $this->ol[$key] = $val; } public function __isset($key){ if(isset($this->ol[$key])){ return true; } return false; } public function __unset($key){ unset($this->ol[$key]); }}$obj = new bee();echo $obj->one;echo '<br>';$obj->one = 1;echo $obj->one;echo '<br>';var_dump(isset($obj->one));
方法重载:如果使用一个不存在的方法,就会调用类中预先定义好的某个方法以处理该行为;
对于方法不用的应用场景,做如下处理
- 在对象中调用不可访问的方法:__call()
- 静态方式中调用不可访问方法:__callStatic()
<?phpclass bee{ public function __call($name,$arr){ echo '<br>'; echo 'function '.$name.' not exist'; } static function __callStatic($name,$arr){ echo '<br>'; echo 'function '.$name.' not exist'; } /*public function __call($name,$arr){ $num = count($arr); if($num<1){ $name(); }else{ $name = $name.'_one'; $name($arr[0]); } }*/}$obj->func();bee::staFunc();/*$obj->func(1);function func(){ echo '<br>'; echo 'no.0';}function func_one($val){ echo '<br>'; echo 'no.'.$val;}*/
注意:以上方法都属于魔术方法,都带有参数
0 0
- PHP之类补充
- php进阶笔记之类
- php手册之类常量
- PHP之类特性
- PHP学习笔记之类
- PHP基础之类
- javaseday34补充(语句 循环 之类的)
- PHP 数学运算之类笔记
- php面向对象之类成员
- php字符截取之类的
- php中安全补充
- php中安全补充
- PHP 正则补充
- PHP排序算法补充
- php面向对象补充
- 剖析PHP中的输出缓冲 flush之类
- 剖析PHP中的输出缓冲 flush之类
- 剖析PHP中的输出缓冲 flush之类
- 数据库索引的设计原则
- 差分约束整理
- Linux 连续执行多条命令
- 欢迎使用CSDN-markdown编辑器
- iOS 开发 -- Swift 语法篇 (六) 集合
- PHP之类补充
- 大型数据库设计原则
- android xml点击交互
- 碰撞检测之Ray-Cylinder检测
- uvaoj-12096:the setstack computer
- kidd风的IOS日志之iOS开发多线程篇—多线程简单介绍
- 数据库设计14个技巧
- MyBatis下动态语句使用like进行模糊查询
- 让网页图片变灰色的三种方法