OOP

类:属性及方法的集合。
特点:属性为方法服务。
语法格式:
class 类名{
public|protected|private $属性名称=值;
public|protected|private function 方法名称(参数,....){
;
return;
}
}
类的使用:
$ob=new 类名(构造函数传参数,.....);
类的外部调用属性
$ob->属性名称;
类的内部调用属性
$this->属性名称;
类的外部调用方法:
$ob->方法名称(参数1,......)
类的内部调用方法:
$this->方法名称(参数1,......)
例子数据库操作类:
方法:
连接数据库
执行sql语句
关闭数据库连接


构造函数:
执行的时间:类实例化对象完成后,自动调用
a) function __construct(参数,......){
方法体;
}
b) function 和类名同名函数(参数,......){
方法体;
}
特点:
1、在其他方法之前必须运行一次。
2、构造函数的返回值没有意义。
3、可见性必须为public
public    在类的内部可以调用,通过对象可以调用,可以被继承
protected 在类的内部可以调用,通过对象不能调用,可以被继承
private   在类的内部可以调用,通过对象不能调用,不能被继承


析构函数
执行时间:对象销毁之前,自动调用
语法格式:
function __destruct(){
方法体;
}
特点:
1、对象销毁之前自动调用,一次
2、没有参数
3、可见性必须为public

4、返回值,没有意义。




类的声明:
class 类名{
public|protected|private $属性名称;
public|protected|private function 方法名称(参数,...){
方法体;
}
}
实际编程过程中:
类的要干什么,分析方法
在方法编写过程中,有一个值,其他的方法也要用,声明一个属性


类的使用:
实例化对象
$ob=new 类名(参数,.....);
$ob->属性名称;
$ob->方法名称(参数,....);

$this->属性名称;
$this->方法(参数,.....);


构造方法
public function __construct(参数,....){
方法体;
}
析构方法
public function __destruct(){
方法体;
}


数据库操作类
文章管理类
留言板类


继承:一个类继承另一个的属性及方法。
作用:我们把公共的属性及方法放到父类中,子类继承就得到。
留言表:
create table cms_message(
id int(8) primary key auto_increment,
title varchar(50) not null,
content varchar(255) not null,
addtime int(11) default 0,
name varchar(10) null,
state tinyint(1) default 0,
tel varchar(50),
ip varchar(20)
)engine=innodb/myisam default charset=utf8;


留言板类:
方法:
列表(查询 分页)
留言总条数
发布留言
审核留言
删除留言


继承的语法格式:
class 子类的名称 extends 父类的名称{
属性
方法
}
特点:
1、把可见性为public protected 的属性及方法全部继承。
2、构造方法及析构方法可以被继承,继承后依然为构造方法。
3、继承的属性及方法可以被重写,可见性越来越强或等于原来的。


获取ip地址:
ip地址 $ip=$_server
发布时间 $addtime=time();


审核:(后台,管理员)




静态类:类中包含了 (静态方法) 或 (静态属性) 。
静态方法:
public|protected|private static function 方法名称(参数,....){

}
静态属性:
public|protected|private static $属性名称
特点:
静态属性,静态方法,属于类。
纯静态类中,构造方法,和析构方法不起作用
静态类中可以包含非静态方法及属性
静态方法中,不能使用 $this
类名::$属性|方法();


静态方法中不可用$this
数据库操作类,不适合用静态类。
验证码类,适合静态类
    
类常量 (属性)
cont 常量名称=值;
1、名称前没有$ const A=值;
2、一定有初,只能访问,不到修改。
    
什么时候用:
值固定不变。
参数值,放到常量中。
使用:
类名::常量名称;
魔术方法:
魔术:调用方式,由某件事情,启动。
function__construct;
function__destruct;
__call; 查询语句的子句
__set;
__get;
__clone;


当调用 一个没有定义的方法时,它自动运行。
function__call($a1,$a2)
{
var_dump($a1,$a2);
}
作用:
用来提示,屏蔽错误。
类的多态。(封装  继承  多态)
多态:一个同名方法 ,参数不同,运行结果不同。


__set;
作用:
屏蔽调用者,通过对象追加属性。
可以 把通过对象加的属性,放到数组中。
__get;
作用:
当通过对象调用 一个不。
__clone;
作用: 克隆变量
 当一个对象被克隆时,__clone() 会自动执行
function __clone(){

}
单例模式
定义:程序运行中, 只有一个对象。
做到三点:
1、不能使用new实例化对象
2、对象不能克隆。
3、有下个静态该去,负责对象 实例化且只实例 化一个。
静态类:类中包含了静态方法或静态属性。
静态方法:
public|protected|private static function 方法名称(参数,....){

}
静态属性:
public|protected|private static $属性名称
特点:
静态属性,静态方法,属于类。
纯静态类中,构造方法,和析构方法不起作用
静态类中可以包含非静态方法及属性
静态方法中,不能使用 $this


类名::$属性|方法();


数据库操作类,不适合。
验证码类,适合静态类
方法:生成验证码


类常量(属性)
const 常量名称=值;
1、名称前没有$  const A=值;
2、一定有初值,只能访问,不能修改。
什么时候用:
值固定不变。
参数值,放到常量中。
使用:
类名::常量名称
验证码类 verify.class.php
类的自动加载 
原理:有一个函数 __autoload(),这个函数,
当有new ,extends,静态方法访问,静态属性访问时,
自动执行。且能够把当前的类名,以参数的形式,传到函数体中。


使用:放在配置文件中。


留言板完善
1、写了配置文件,使用了自动加载
2、配置文件中,url地址的基地址


魔术方法
魔术:调用方式,由某件事情,启动。
function __construct()
function __destruct()
当调用一个没有定义的方法时,它自动运行
function __call($a1,$a2){
var_dump($a1,$a2);
}
作用:
用来提示,屏蔽错误。
类的多态(封装  继承  多态)


多态:一个同名方法,参数不同,运行结果不同。
class Test{
function fun1(){-
echo "123";
}
function fun1($a){
echo "456";
}
}
当给一个不存在的属性赋值时,__set自动调用
function __set($name,$value){
var_dump($name,$value);
}
作用:
1、屏蔽调用者,通过对象追加属性。
2、可以把通过对象追加的属性,放到数组中。


当通过对象调用一个不存在的属性时,get自动执行
function __get($name){

}
函数
作用:克隆变量
clone($arr)
当一个对象被克隆时,__clone() 会自动执行
function __clone(){

}


单例模式

$str=Preg_replace("/(\d+)-(\d+)-(\d+)/","$0/$2","1-2-3");
echo $str;

静态类
可见性 static $属性名=值;
可见性 static function 方法名称(参数,....){
}
内部:类名|self::$属性名称
类名::方法名称();
类常量
const 名称=值;
自动加载
function __autoload($className){
//类的加载
}
魔术方法
__construct()
__destruct()
__call()
__set()
__get()
__clone()
单例模式:
1、不能使用new实例化对象
2、不能被克隆
3、有一个静态方法能够只产生一个对象


知识点:
抽象类 *
定义:包含了抽象方法的类,是抽象类。
抽象方法:
定义:没有方法体的方法,为抽象方法。
特点:
1、如果一个类中包含抽象方法,一定是抽象类。
2、抽象类中,不一定有抽象方法。
     这样的类,目的是控制只能继承,不能实例化对象。
  Model.class.php
3、抽象类不能实例化对象,只能被继承。
4、抽象类中,可以有普通方法。


接口 *
接口里面的方法,都为抽象方法。
语法格式:
interface test{
function fun1();//每个方法默认可见性为public
function fun2($a,$b);
function fun3($c);
}
团队开发中,会使用。
总监
接口:
interface news{
作用:添加文章
param:array $arr=array('title'=>'aa',.....)
return:主键id值
author:li

function addNews($arr);
}


工程师:继承接口,封装响应类
class newsc implements news{
function addNews($arr){
$sql="";
return 1;
}
}


特点:
1、语法格式特殊:
interface 接口名{
//抽象方法,没有可见性,默认是public
}
2、不能实例化对象。
3、继承接口使用关键字  implements
4、可以多继承,和extends 不同。


抽象类接口的加载:
单独文件中,如何使用???
1、抽象类可自动被加载,只要遵循命名规则。
test_abstract.class.php newtest.class.php demo-1.php
2、接口也可以自动被加载,只要遵循命名规则。
test_interface.class.php  testface.class.php  demo-2.php
implements也会启动__autoload()


分页类  ***
分页实现流程:
1、获取总条数(分页类中,肯定会用)
select count(*) as num from 表名 where 条件
文章的分类 cId=3  获取标题中包含 a title like '%$k%'
2、确定每页条数(分页类,参数传值)
3、确定总页数(分页类的构造方法来做这个事情)
4、获取当前页码值(在分页类中,从get预定义变量中)
5、判断页码值的合法性(分页类的构造方法来做这个事情)
6、算出上一页,下一页的页码值(分页类)
7、算出开始位置值(($page-1)*$pageSize,分页类的一个方法)
8、拼sql语句(当前页要显示的记录)(不是分页类做的事情)
9、呈现列表
10、分页效果(分页类的一个方法)
Page.class.php


小方块分页效果:
前后各显示2个,
总页数不够2*2+1个
无条件全部显示


第一种:前面不够显示if($this->page<=2+1),后面补
从1 2 3 4 5


第二种:后面不够显示if($this->page+2>=$this->pageNum),前面补
从16 17 18 19 20
从 $this->pageNum-2*2


第三种:前后都够显示
当前页5  从3 4 5 6 7
从 $this->page-2  到 $this->page+2


oop面向对象编程:
类:属性及方法的集合
属性
普通属性
public|protected|private $属性名称=值;
静态属性
public|protected|privete static $属性名称=值;
常量
const 名称=值;


访问:
普通属性:
$this->属性名称   object->属性名称
静态属性:
self::$属性名称  类名::$属性名称
常量
self::名称   类名::名称
赋值:
普通属性:
$this->属性名称=值   object->属性名称=值
静态属性:
self::$属性名称=值  类名::$属性名称=值


方法
普通方法
public|protected|private function 方法名称(参数,...){
}
静态方法
public|protected|private static function 方法名称(参数,...){
}
抽象方法
public|protected abstract function 方法名称(参数,...);
魔术方法
__construct()
__destruct()
__call()
__set()
__get()
__clone()
继承:
作用:把一些类的公共属性及方法,放在父类中,子类去继承
语法格式:
class 子类名称 extends 父类名称{


}
自动加载
function __autoload($className){
require ROOT.$className.".class.php";
}
接口
抽象类



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值