博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PHP OO 编程笔记
阅读量:6824 次
发布时间:2019-06-26

本文共 4359 字,大约阅读时间需要 14 分钟。

1. 类中的方法不是全局方法,可以和外部的普通方法重名,例如:

则会报错:不能重新声明方法

Fatal error: Cannot redeclare time()

而在类中定义则可以:

time();

页面输出:

2015-02-28 16:47:36

 ===============

 

2.析构函数

'; } public function __destruct(){ echo 'bye'; }}$a = new Human();//此时会输出'hello'和'bye'//因为php是脚本语言,在代码执行到最后一行时,所有申请的内存都要被释放。//自然,对象也要被销毁

$a 并不是对象,只是一个变量名指向对象。当一个对象如果还有其他变量来引用,unset($a)并不会销毁对象。当引用为0时,对象才会被销毁。

==========

 

3.父类的 private 属性可以被子类继承,但是子类无权操作

页面输出:

object(Stu)[1]  private 'name' => string 'student' (length=7)  private 'name' (Human) => string 'monkey' (length=6)

=======

 

4.名词:里氏代换 - 面向对象设计的基本原则之一,任何基类可以出现的地方,子类一定可以出现。

 

多态 - 只抽象地声明父类,具体工作由子类对象完成。简单例子

setUp(); }}class Glass{ public $color; public function setUp(){ echo '装上',$this->color,'色的玻璃
'; }}class RedGlass extends Glass{ public $color = '红';}class BlueGlass extends Glass{ public $color = '篮';}$light = new Light();$redglass = new RedGlass();$blueglass = new BlueGlass();$light->turnOn($redglass);$light->turnOn($blueglass);

页面输出:

装上红色的玻璃

装上篮色的玻璃

=======

 

5. 魔术方法 ( __get(),__set(),__isset(),__unset() ) 在框架中的应用

data[$p])){ return $this->data[$p]; } } //设置 public function __set($p,$v){ $this->data[$p] = $v; return $this->data; } //销毁 public function __unset($p){ if(isset($this->data[$p])){ unset($this->data[$p]); } } //isset判断 public function __isset($p){ return isset($this->data[$p]); } public function add(){ //取出$data里存放的数值,键作为数据表的字段名,值作为数据表的字段值 $k = implode(',',array_keys($this->data)); $v = implode('\',\'',array_values($this->data)); //拼接字符串 $sql = 'insert into Review ('; $sql .= $k; $sql .= ') values (\''; $sql .= $v; $sql .= '\')'; return $sql; }}$new = new UserModel();$new->username = 'uname';$new->password = 'upwd';var_dump($new);var_dump($new->email); //显示 nullecho $new->add(),'
';unset($new->password);var_dump($new);

页面输出:

object(UserModel)[1]  protected 'data' =>     array      'username' => string 'uname' (length=5)      'password' => string 'upwd' (length=4)nullinsert into Review (username,password) values ('uname','upwd')object(UserModel)[1]  protected 'data' =>     array      'username' => string 'uname' (length=5)

=================

 

7.抽象类

① 抽象类的抽象方法不能有方法体,否则报错:Fatal error: Abstract function Classname::functionname() cannot contain body in ...

② 抽象类不能被实例化,否则报错:Fatal error: Cannot instantiate abstract class Classname in...

③ 继承抽象类的子类必须实现抽象类中的所有抽象方法,后则报错:Fatal error: Class SonClassname contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (AbstractClassname ::Abstractfunctionname) in ...

④ 含有抽象方法的类一定是抽象类;

⑤ 抽象类中不一定有抽象方法,也可以含有非抽象方法。

==================

 

8.延迟绑定:

是指类的计算 self 的定义不是以定义时为准,而是以运算时的计算结果为准。

'; } public static function t1(){ self::eat(); echo self::age,'
'; echo self::$leg,'
'; } //延迟绑定 public static function t2(){ static::eat(); echo static::age,'
'; echo static::$leg,'
'; } }//人类class Human extends Animal{ const age = 30; public static $leg = 2; public static function eat(){ echo 'cooked food
'; }}//学生类class Stu extends Human{ const age = 20; public static $leg = 3; public static function eat(){ echo 'rubbish food
'; }}Stu::t1();Stu::t2(); //后期绑定(运行期绑定)

页面输出:

fresh food 

1
4
rubbish food 
20
3

==================

 

9.接口

如果说类是一种事物的抽象,那么接口则是事物的功能的抽象。

接口比抽象类更为抽象,接口中不能含有非抽象方法,不能含有成员属性。接口中可以定义常量。

一个类可以同时实现多个接口,同时必须实现接口中所有的抽象方法。

不能实例化接口。

类实现接口使用 implements。接口继承接口使用 extends 。

 ======================

 

10.类的自动加载

say();

 

=======================

 

 11.异常

在类中如果产生了错误,实例化该类依然会生成对象。使用了异常处理之后就可以针对对象进行错误检测。

conn = mysql_connect('localhost','root','111'); //异常处理 if(!$this->conn){ //实例化exception类,并传递错误信息和错误码参数 $e = new Exception('数据库连接失败!!',9); //抛出异常 throw $e; } }}//测试并试图捕捉异常try{ $mysql = new Db();}catch(Exception $e){ echo '捕捉到错误信息:'; echo $e->getMessage(),'
'; echo '捕捉到的错误码:'; echo $e->getCode(),'
'; echo '错误文件:',$e->getFile(),'
'; echo '错误行:',$e->getLine(),'
';}var_dump($mysql);

 如果数据库的信息填写错误,比如密码错误,页面输出:

捕捉到错误信息:数据库连接失败!!捕捉到的错误码:9错误文件:D:\practise\php\OOP\exception.php错误行:11null

 

转载地址:http://gqezl.baihongyu.com/

你可能感兴趣的文章
Veeam成立十周年,展望未来十年的科技发展
查看>>
Apollo,让机器人开发更简单
查看>>
Linux防火墙iptables规则设置(转)
查看>>
C语言中getch()、getche()和getchar()
查看>>
厂商“阅兵”:从2015年IFA看消费电子发展新趋势
查看>>
2020年,1000亿个智能终端驱动嵌入式闪存高速发展
查看>>
精选10大机器学习开源项目 !(附链接)
查看>>
中国电信“商密云存储系统”通过国家商用密码产品鉴定
查看>>
用区块链技术养走地鸡,我认真的
查看>>
用SublimeText当Unity Shader的编辑器
查看>>
指数哥伦布编码
查看>>
数据库查询索引(sql单个索引和复合索引)
查看>>
风口更需冷静 智能家居如何跨越鸿沟?
查看>>
CISO元素周期表
查看>>
Activity的启动模式与flag详解
查看>>
x86 linux 裁剪过程中能正常跑起来的必要配置项
查看>>
程序猿的24个段子,超级实用和搞笑哦!!!
查看>>
数据库造成的SqlExceptionHelpe
查看>>
ssh免密码登录
查看>>
如何做外键约束
查看>>