【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."页&nbsp;
			 当前第".$this->cur_page."页&nbsp;"
			 .$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.="&nbsp;<a href='?p=".$n."'>$n</a>&nbsp;";
			}
		}
		
		//连接上当前页
		$lists .= "&nbsp;".$this->cur_page."&nbsp;";
		//5 6 7
		for($i=1;$i<=$num;$i++){
			$n = $this->cur_page+$i;
			if($n<=$this->total_page){
				$lists.="&nbsp;<a href='?p=".$n."'>$n</a>&nbsp;";
			}
		}
		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>&nbsp;
				  <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 = "&nbsp;<a href='?p=".$next."'>下一页</a>&nbsp;
				  <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
除非注明,文章均为 《简单记录》 原创,欢迎转载!转载请注明本文地址,谢谢。


上一篇: 上传类
下一篇: 【OOP】day03

发表评论:

    56.73ms