PHP类与对象
来源:互联网 发布:ftp安卓软件 编辑:程序博客网 时间:2024/06/06 08:39
PHP类与对象
作者:Wucl
时间:2014-11-24
章节内容:基础背景、实际应用、个人心得(这个人非常没品德,想到什么就写什么。)。
1. 基础背景:
类的出现使PHP具有了面向对象编程的功能,而每种语言的面向对象编程都具有其独特性,此篇文章就是记录了我对PHP中类的一些理解和感悟。
2. 实际应用:
1)类可以理解为:一组属性和一组行为方式的集合。
2)PHP类形如:class SimpleClass { }。
3)PHP类的基本知识:PHP不支持多重继承,一个类只能继承一个基类。PHP类中常用的关键字public、protected、private、$this、new、extends、::class、static、self、parent、const、abstract、final等等。 PHP类中常用的方法__autoload()、spl_autoload_register()、call_user_func()、call_user_func_array()、func_get_arg()、func_get_args()、func_num_args()、function_exists()、get_called_class()等等。
上述关键字和方法PHP Manual里有详细的资料,因此在这里不多做介绍。
4)不过,在此需要强调PHP类中后期静态绑定的概念:
官方解释:
自 PHP 5.3.0 起,PHP 增加了一个叫做后期静态绑定的功能,用于在继承范围内引用静态调用的类。
准确说,后期静态绑定工作原理是存储了在上一个“非转发调用”(non-forwarding call)的类名。当进行静态方法调用时,该类名即为明确指定的那个(通常在 :: 运算符左侧部分);当进行非静态方法调用时,即为该对象所属的类。所谓的“转发调用”(forwarding call)指的是通过以下几种方式进行的静态调用:self::,parent::,static:: 以及 forward_static_call()。可用 get_called_class() 函数来得到被调用的方法所在的类名,static:: 则指出了其范围。
该功能从语言内部角度考虑被命名为“后期静态绑定”。“后期绑定”的意思是说,static:: 不再被解析为定义当前方法所在的类,而是在实际运行时计算的。也可以称之为“静态绑定”,因为它可以用于(但不限于)静态方法的调用。
个人心得:
官方的解释很精辟,但对于初学者来说难以理解。接下来的描述可能容易理解一点:static有两种作用,第一种“后期静态绑定”关键字,第二种用于静态属性。后期静态绑定就是运行时绑定最后解析到的属性和方法,如果没有对应的属性和方法则会报致命性错误。例如:A类有静态属性$name='A',B类有静态属性$name='B',在A类中有方法public static test(){echo static::$name},A::test()输出结果“A”,B::test()输出结果“B”。
5)PHP在5.3.0以后引入了命名空间、变量动态调用类、自动装载类、补充了重载、后期静态绑定等功能后使得类的作用更加完整,同时使用PHP面向对象编程更加优雅。那么在这里重点说一下命名空间。
官方解释:
PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称。
个人心得;:命名空间的常用关键字namespace(命名)、use(导入别名),调用全局类时注意使用\。
6)下面就从实际项目的角度分析PHP的类,一个项目(由中间件提供数据):入口 -> 路由解析 -> 类的装载 -> 数据解析 -> 页面的渲染,类与对象在这条生产线的开发和维护过程中究竟起到了什么作用呢?
入口:会做重定向,这和服务相关(url伪静态还是要做的)。
路由解析:每个url路径都需要经过路由解析步骤,那么路由解析需要具备高度的重用性、业务逻辑和属性特征分离两个特征。这就需要一类事物的建立,然后在这一类事物中重复找出实体来执行相同行为(路由匹配,url转换)以及不同特征(url的值不同)的事情。
类的装载:在PHP有spl_autoload_register()可以做到自动装载类,这个步骤贯穿整个项目,由于命名空间的作用使其的行为方式可以统一,所以类的装载具备高度重用性即可。
数据解析:首先建立数据链路,然后获取数据,最后解析数据。高度的重用性、业务逻辑和属性特征分离两个特征也是其所必备的。
页面渲染:需要类的重载来设置数据,重用性来获取渲染模板以及数据。
3. 个人心得:
PHP执行类与接口之外的所有代码,为避免代码复杂化建议有统一的入口。类之间低耦合和类本身高内聚决定了项目的可维护性、代码的健壮性。为提高整个项目的运行效率建议做redis缓存。
- PHP 类与对象
- PHP 类与对象
- PHP类与对象
- PHP 类与对象
- PHP类与对象
- PHP基础 类与对象
- php实例-对象与类
- 浅谈PHP类与对象
- PHP manual 【类与对象】
- php 类与对象(属性)
- PHP 类与对象说明
- php解释类与对象
- [php_03]php类与对象
- php面向对象编程-类与对象
- php中的类与对象(对象比较)
- PHP学习之四:类与对象
- PHP 类与对象 知识详解
- PHP中的类与面向对象
- BZOJ 2464 中山市选 2009 小明的游戏 最短路
- 查看基于Android 系统单个进程内存、CPU使用情况的几种方法
- lockCanvas为NULL的原因
- Sencha Touch 2 实现跨域访问
- Unity3D镜头抖动特效
- PHP类与对象
- google MarkerClusterer v3
- vim下的ctags和taglist等的使用和配置
- mysql查询当前时间,一天内,一周,一个月内的sql语句
- HTML5 简介
- Android中shape的使用
- java路径相关(相对路径,绝对路径,抽象路径)
- 添加Cygwin桌面右键菜单
- Go内建函数(对于引用类型) new 和 make 的区别