回顾
面向对象:将自然界中的实体抽象出来,形成类。与面向过程相对,面向过程是指将一个事务分解成各个功能,然后对功能使用函数进行封装,在使用的时候调用函数即可。
面向的对象的基本概念:类,对象,实例化,抽象
类成员:属性,方法和类常量
访问限定修饰符:public,protected,private,var
魔术方法:在某些情况下会被自动触发的方法
语法:__(英文环境下的两个下划线)
__construct():构造方法,在对象被实例化之后,新生成的对象去调用方法,用来初始化对象里的属性
__destruct():析构方法,在对象被销毁的时候会自动调用,释放内存
unset:将指向内存的变量的指针给段掉
更改变量值:
等待脚本结束
对象的比较:==和===
对象的传值:默认是引用传值
封装DB类
类是一个工具,在需要的时候去调用他使用他。类里面不包含任何数据,所有数据的来源应该全部依赖在调用的时候外部传入。
mysql_connect
mysql_query
$sql = “insert into pro_student values(null,…..)”;
mysql_query($sql);
$db = new DB;
$sql = “insert into pro_student values(null,…..)”;
$db->insert($sql);
加载
如果要使用一个类来创建对象,那么必须先保证该类已经加载到内存,才能创建对象。
使用require或者include将需要使用的类文件给加载进来,然后才可以创建对象去使用。
在引入类文件的时候,需要每次都手动去加载文件。尤其是当脚本文件很大,需要使用很多类的时候,就需要加载很多类。PHP提供了一种机制,当类被使用的时候,系统会自动先判断当前内存里是否已经有该类,如果没有,会去指定的路径假面加载类文件。
自动加载
语法:__autoload(),魔术函数
参数:string $class,是一个类名,需要加载的类名
__autoload()只是提供了一个机制,能够在需要类的时候,自动的去找,如果用户需要去获取指定路径下的类文件,那么需要在函数体里去实现。
__autoload()原理
正确的自动加载
类成员:属性,方法和类常量
类常量:在类里面定义的常量
常量定义:define(‘常量名’,’常量值’);
类常量语法:const 常量名 = 常量值
访问常量
- 不能使用对象访问
- 只能使用类访问
语法:类名::常量名
:::范围解析操作符,专门用于类来访问类内部的数据或者方法
在类中有没有一中方法能够直接代替类名?self
self:自己的意思,只能在类内部使用,代替当前类名
类能够访问自己的普通方法,但是会报一个错误(严格错误),原因是因为方法是用户对象访问(普通方法)
类不能访问普通属性
类能访问的东西
类常量
静态方法
(普通方法)会报错
静态:静态属性静态方法
静态属性:访问限定修饰符static 属性名
静态方法:访问限定修饰符 static function 方面名字
如何访问静态属性和方法?
通过类访问:类型::静态属性或者静态方法
属性访问
方法访问
注意:静态属性或者方法的访问,不需要进行类的实例化
静态的属性和方法也受访问限定修饰符的控制。
总结
做一个简单的计数器:统计当前类有多少个对象。
魔术方法
__toString():将对象按照字符串输出
对象不能直接输出
当对象碰到echo进行输出的时候,系统会自动触发__toString()方法
__clone():在对象被克隆的时候会自动调用的方法
如何获得一个类的对象?
- new 类,实例化对象
- 克隆
self与$this的区别
- 都是在类的内部被使用
- self代表当前类,$this代表当前访问类方法的对象
- self能访问静态的属性和方法,$this能访问普通的属性和方法(也能访问静态方法,不建议这样用)
模式
设计某个东西一种方式。
单例模式:对应到面向对象,永远只能从一个类产生出一个对象。
如何保证一个类只有一个对象?
构造和克隆都能产生新对象
- 克隆方法私有化:使得克隆不能产生新对象
- 阻止在类的外部进行实例化
如何实现单例模式?
三私一公
三私:私有化构造方法,私有化克隆方法,私有化静态对象属性
一公:公有获得对象的静态方法
见代码demo08_single.php
DB类的单例模式:见代码SingleDB.class.php
魔术常量
__CLASS__:当前的类名
__METHOD__:当期方法
对象判断
is_object:判断当前变量是否是一个对象
instanceof:判断一个对象是否属于某个类
为何一个类要有普通方法和静态方法?
- 区分对象和类的操作
- 静态方法的执行效率比普通方法高(减少代码量,降低内存开销,提高效率)
用户管理类:类名Privilege
类需要实现的方法:注册,验证用户名,验证密码(两次是否一致,密码长度不能小于6位)
实现登陆方法:验证用户名和密码
信息都是通过DB类对象来进行数据库操作
class Privilege{
//属性用来保存db类的对象
//构造方法内连接数据库
Public function __construct(){
//加载DB类(使用自动加载)
//得到DB类的对象,保存在属性里
}
//注册
Public function register(){
//判断用户的数据是否合法
//组织SQL语句,密码使用md5加密
//调用DB类的插入方法
$this->属性->insert($sql);
}
//验证用户登陆信息
public function checkLogin($username,$password){
///判断参数的合法性
//对密码进行md5加密
//组织查询SQL语句
//$this->属性->getRow($sql);
//返回结果
}
}
注册:如果注册成功提示用户注册成功,进入到登录界面(跳转),不成功则回到当前界面
登录:登录成功提示用户,跳转到index.php界面,否则回到登录界面
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/10667.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除