【OOP】day04
作者: thtomatic 分类: php笔记 评论: [ 0 ] 条 浏览: [ 949 ] 次
面向对象面向对象的三大特征
封装、继承、多态
面向对象的关键词和魔术方法
1、final
- 被final修饰的类不能被继承。
- 被final修饰的成员方法不能被重载。
- final不能用来修饰成员属性。
2、instanceof
- 判断一个类对象是否属于这个类
3、const
- 定义常量
- 语法:
const 常量名称=常量值
- 访问
类外:类名称::常量名称
类里:self::常量名称
注: define同样用于定义常量,但是在类中不能使用define定义常量
命名空间不支持define。不建议使用。
4、static关键词
- static 不可以用来声明类
- static 可以用来修饰成员属性
在类外:类名称::成员属性
在类里面:self::成员属性
- static 可以用来修饰成员方法
在类外:类名称::成员方法
在类里面:self::成员方法
在静态化的成员方法中不允许访问非静态化的成员方法和成员属性。
被static修饰的成员方法里面不能出现关键词$this
魔术方法
__toString()
在以字符串形式输出类对象时,魔术方法__toString()会被自动调用。
在__toString()要return一个字符串。return的字符串可以作为对当前类的说明。
__call()
在访问类中不存在的成员方法时,魔术方法__call()会被自动调用。
魔术方法__call()需要两个参数。第一参数是访问的不存在的成员方法的名称。第二个参数是访问不存在的成员方法的参数。第二个参数格式是数组。将多个功能相似的成员方法写入到__call()。
__clone()
在应用关键词clone时,魔术方法__clone()会被自动访问。
给成员属性赋初值。
__autoload()
在类被实例化时会被自动访问。autoload魔术方法必须要求一个参数。
作用:自动加载类。
魔术方法autoload写在类外面。
单例模式
1、用途:
防止内存空间浪费
2、实际应用
数据库类实例化。
3、单例模式实现过程
- 禁止类对象在类外被实例化。
将构造方法私有化
- 定义静态化成员方法,在类里面实例化类,获取类对象
- 在类中声明静态化成员属性$obj.
- 在静态化成员方法中对静态化成员属性是否为空进行判断。
若为空,则实例化类。将实例化后的类对象赋值给静态化成员属性
若不为空,则直接返回静态化成员属性。
以下为自动分页的封装的类:
<?php header("Content-Type:text/html;charset=utf-8"); class Page{ public $total; //总记录数 public $page_size; //每页显示记录数 public $total_page; //总页数 public $cur_page; //当前页 //定义构造方法,给成员属性赋初值 function __construct($total,$page_size){ $this->total = $total; $this->page_size = $page_size; $this->total_page = $this->getTotalPage(); $this->cur_page = $this->getCurPage(); } //定义出口程序,用于输出分页类的效果 function pages(){ echo "共".$this->total_page."页 当前第".$this->cur_page."页 " .$this->flist() .$this->listNum() .$this->llist(); } //定义成员方法,获取总页数 function getTotalPage(){ //ceil(总记录数/每页显示记录数) $total_page = ceil($this->total/$this->page_size); return $total_page; } //获取当前页 function getCurPage(){ //http://localhost/Page.class.php $cur_page = isset($_GET['p'])?$_GET['p']:1; //$cur_page = 1 //$this->total_page = 0 //对当前页的取值进行判断 if($cur_page<1){ $cur_page=1; }else if($cur_page>$this->total_page&&$this->total_page!=0){ $cur_page=$this->total_page; } return $cur_page; } // 1 2 3 4 5 6 7 function listNum(){ //定义队列长度 $num = 3; //1 2 3 $lists = ""; for($i=$num;$i>=1;$i--){ $n = $this->cur_page-$i; if($n>=1){ $lists.=" <a href='?p=".$n."'>$n</a> "; } } //连接上当前页 $lists .= " ".$this->cur_page." "; //5 6 7 for($i=1;$i<=$num;$i++){ $n = $this->cur_page+$i; if($n<=$this->total_page){ $lists.=" <a href='?p=".$n."'>$n</a> "; } } return $lists; } //首页 上一页 function flist(){ //$prev = 1-1 = 0 //$prev = 2-1 = 1 $prev = $this->cur_page-1; $lists = ""; if($prev>=1){ $lists = "<a href='?p=1'>首页</a> <a href='?p=".$prev."'>上一页</a>"; } return $lists; } //下一页 尾页 function llist(){ //$next = 10+1 = 11 //$next = 11+1 = 12 $next = $this->cur_page+1; $lists = ""; if($next<=$this->total_page){ $lists = " <a href='?p=".$next."'>下一页</a> <a href='?p=".$this->total_page."'>尾页</a>"; } return $lists; } } //总记录数52 $total = 52; //每页显示的记录数 $page_size = 5; $p = new Page($total,$page_size); $p->pages();
图片:
版权所有:《thtomatic》 => 《【OOP】day04》
本文地址:https://ask.mykeji.net/phpnotes/oop_day04.html
除非注明,文章均为 《简单记录》 原创,欢迎转载!转载请注明本文地址,谢谢。
发表评论: