OOP
2015-06-09 23:31
239 查看
类:属性及方法的集合。
特点:属性为方法服务。
语法格式:
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";
}
接口
抽象类
特点:属性为方法服务。
语法格式:
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";
}
接口
抽象类
相关文章推荐
- linux下C/C++编译时系统搜索 include 和 链接库 文件路径的指定
- 虚拟机linux安装mysql
- UVa 1124 - Celebrity jeopardy
- org.apache.hadoop.hdfs.server.datanode.DataNode: Exception in receiveBlock for block
- nginx第三方模块---nginx-sticky-module的使用(基于cookie的会话保持)
- Learning_Opencv(一)使用摄像头录制视频并逐帧写入文件
- VS2010, VS2008发布网站,无法显示网站数据
- Nginx反向代理、缓存、负载均衡
- Linux(Ubuntu)新增用户并设置为管理员
- 每日linux命令学习
- Linux系统编程——进程间通信:共享内存
- 10.Linux 管道
- LVS-dr架构原理与实现方案
- nginx gzip压缩提升网站速度
- linux 卸载软件大全
- 网站迁移到其他机子上时显示空白解决方法
- org.apache.catalina.core.StandardContext startInternal SEVERE: Error listenerStart
- linux下彻底删除软件及配置文件
- 07.linux系统管理命令
- Linux基本目录结构