PHP类与对象

来源:互联网 发布:ftp安卓软件 编辑:程序博客网 时间:2024/06/06 08:39

PHP类与对象

作者:Wucl

时间:2014-11-24

章节内容:基础背景、实际应用、个人心得(这个人非常没品德,想到什么就写什么。)。

1. 基础背景:

类的出现使PHP具有了面向对象编程的功能,而每种语言的面向对象编程都具有其独特性,此篇文章就是记录了我对PHP中类的一些理解和感悟

2. 实际应用:

1类可以理解为:一组属性和一组行为方式的集合。

2PHP类形如class SimpleClass { }

3PHP类的基本知识PHP不支持多重继承,一个类只能继承一个基类。PHP类中常用的关键字publicprotectedprivate$thisnewextends::classstaticselfparentconstabstractfinal等等。 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”。

5PHP5.3.0以后引入了命名空间、变量动态调用类、自动装载类、补充了重载、后期静态绑定等功能后使得类的作用更加完整,同时使用PHP面向对象编程更加优雅。那么在这里重点说一下命名空间。

官方解释

PHP 命名空间提供了一种将相关的类、函数和常量组合到一起的途径。在一个命名空间中,当 PHP 遇到一个非限定的类、函数或常量名称时,它使用不同的优先策略来解析该名称。类名称总是解析到当前命名空间中的名称。因此在访问系统内部或不包含在命名空间中的类名称时,必须使用完全限定名称。

个人心得;:命名空间的常用关键字namespace(命名)use(导入别名),调用全局类时注意使用\

6)下面就从实际项目的角度分析PHP的类,一个项目(由中间件提供数据):入口 -> 路由解析 -> 类的装载 -> 数据解析 -> 页面的渲染,类与对象在这条生产线的开发和维护过程中究竟起到了什么作用呢?

入口:会做重定向,这和服务相关(url伪静态还是要做的)。

路由解析:每个url路径都需要经过路由解析步骤,那么路由解析需要具备高度的重用性、业务逻辑和属性特征分离两个特征。这就需要一类事物的建立,然后在这一类事物中重复找出实体来执行相同行为(路由匹配,url转换)以及不同特征(url的值不同)的事情。

类的装载:在PHPspl_autoload_register()可以做到自动装载类,这个步骤贯穿整个项目,由于命名空间的作用使其的行为方式可以统一,所以类的装载具备高度重用性即可。

数据解析:首先建立数据链路,然后获取数据,最后解析数据。高度的重用性、业务逻辑和属性特征分离两个特征也是其所必备的。

页面渲染:需要类的重载来设置数据,重用性来获取渲染模板以及数据。

3. 个人心得:

PHP执行类与接口之外的所有代码,为避免代码复杂化建议有统一的入口。类之间低耦合和类本身高内聚决定了项目的可维护性、代码的健壮性。为提高整个项目的运行效率建议做redis缓存。

0 0