PHP.OOP

学习要点:

1.OOP的魔术方法

2.类函数和对象函数

3.OOP的反射API

PHP通过类和方法等语言结构支持面向对象编程。同时也通过对象相关的函数和内置类为面向对象提供广泛支持。

一.OOP的魔术方法
PHP引入了__autoload()内置方法来自动包含类文件。__autoload()应该被写成单个参数的方法。当PHP引擎遇到试图实例化未知类的操作时,会调用__autoload()方法,并将类名当作字符串参数传递给它。
function __autoload($_className) {
require $_className.‘.class.php‘;
}
$demo = new Computer();//自动触发__autoload()方法,但是必须存在__autoload()这个方法

PHP采用了__call()内置方法来屏蔽对象调用方法时产生的错误。当对象调用一个不存在的方法时,会自动调用__call()方法。
private function __call($_methodName,$args) {
echo $_methodName.‘方法不存在‘;
print_r($args);
}
$computer->go(‘我‘,1,‘知道‘);//会自动触发__call方法,同样必须存在__autoload()这个方法

PHP使用__toString()内置方法来打印对象的引用。没有使用__toString()的对象是产生一个错误,当打印对象的时候会自动调用__toString()方法。
class Computer {
private function __toString() {
return ‘打印对象‘;
}
}
echo new Computer();//会自动触发Computer类里面的__toString()方法,如果Computer里面没有__toString方法将会产生一个错误

PHP可以在类中定义一个__clone()内置方法来调整对象的克隆行为。当一个对象被克隆的时候自动执行__clone()方法,而复制的对象可以在其方法体内进行调整。
class Computer {
public $_name ;
public function __clone() {
$this->_name = ‘123‘;
}
}
$computer1 = new Computer();
$computer1->_name = ‘dell‘;
$computer2 = clone $computer1;//$computer2实例会在内部自动执行__clone方法
echo $computer2->_name;//打印出123
echo $computer1->_name;//打印出dell

二.类函数和对象函数
PHP提供了一系列强大的函数来检测类和对象。以便在第三方系统,运行时知道正在使用的是哪个。
1.class_exists()函数接受表示类的字符串,检查并返回布尔值。如果类存在,返回true,否则返回false。
echo class_exists(‘Computer‘);
2.get_class()函数获取对象的类名,如果不是对象,则返回false。
echo get_class($computer);
3.get_class_methods()函数获取类中的方法(公共的),以数组的形式返回出来。
print_r(get_class_methods($computer));
4.get_class_vars()函数获取类中的字段(公共的),以数组的形式返回出来
print_r(get_class_vars(‘Computer‘));
5.get_parent_class()函数获取子类的父类,如果没有返回false。
echo get_parent_class(‘NoteComputer‘);
6.interface_exists()函数确定接口是否存在,如果存在返回true,否则返回false。
echo interface_exists(‘Computer‘);
7.is_a()函数确定对象是否是类或者是否是这类的父类时,返回ture,否则返回false。
echo is_a($computer,‘Computer‘);
8.is_subclass_of()函数确定对象是否是类的子类,是返回ture,否则返回false。
echo is_subclass_of($notecomputer,‘Computer‘);
9.method_exists()函数确定对象的方法是否存在,是返回ture,否则返回false。
echo method_exists($computer,‘_run‘);

三.OOP的反射API
PHP5的类和对象函数并没有告诉我们类内部的所有一切,而只是报告了它们的公共成员。要充分了解一个类,需要知道其私有成员和保护成员,还要知道其方法所期望的参数。
对此,使用反射API。
1.获得反射API的转储信息
$rc = new ReflectionClass(‘Computer‘);
Reflection::export($rc);
2.获得PHP内置的类库的信息
Reflection::export(new ReflectionClass(‘Reflection‘));
3.获取类里的某个元素
$_rc = new ReflectionClass(‘Computer‘);
echo $_rc->getFileName();
echo $_rc->getName();

时间: 2024-10-21 11:58:09

PHP.OOP的相关文章

在java中,OOA是什么?OOD是什么?OOP是什么?

OOA Object-Oriented Analysis:面向对象分析方法 是在一个系统的开发过程中进行了系统业务调查以后,按照面向对象的思想来分析问题.OOA与结构化分析有较大的区别.OOA所强调的是在系统调查资料的基础上,针对OO方法所需要的素材进行的归类分析和整理,而不是对管理业务现状和方法的分析. OOA(面向对象的分析)模型由5个层次(主题层.对象类层.结构层.属性层和服务层)和5个活动(标识对象类.标识结构.定义主题.定义属性和定义服务)组成.在这种方法中定义了两种对象类之间的结构,

OOP的三大特性------封装、继承、多态

封装 1.<1>类背后隐藏的思想是数据抽象和封装 <2>信息隐藏,隐藏对象的实现细节,不让外部直接访问到 将数据成员和成员函数一起包装到一个单元里,单元以类的形式实现 <3>将数据成员和成员函数包装进类中,加上具体实现的隐藏, 共同被称作封装,其结果是一个同时带有特征(比如车的价格 车牌号)和 行为(比如开车 停车)的数据类型 <4>定义类,定义其数据成员.成员函数的过程称为封装类 2.信息隐藏是OOP最重要的功能之一,也是使用访问修饰符的原因 信息隐藏的原

玩转JavaScript OOP[2]&mdash;&mdash;类的实现

概述 当我们在谈论面向对象编程时,我们在谈论什么?我们首先谈论的是一些概念:对象.类.封装.继承.多态.对象和类是面向对象的基础,封装.继承和多态是面向对象编程的三大特性. JavaScript提供了对象却缺乏类,它不能像C#一样能显式地定义一个类.但是JavaScript的函数功能非常灵活,其中之一就是构造函数,结合构造函数和原型对象可以实现"类". 对象和类的概念 对象 "对象"是面向对象编程中非常重要的一个概念,一个对象是一个"东西"(某个

C#语言-04.OOP基础

a. OOP:面对对象思想 i. 类:是一种功能强大的数据类型,而且是面向对象的基础 1. 语法:访问修饰符 class 类名{ //类的主体 } 2. 成员变量:不以"函数"形式体现 a. 常量:代表与类相关的常量值 b. 变量:类中的变量 c. 事件:由类产生的通知,用于说明发生了什么事件 d. 类型:属于类的局部类型 3. 成员函数:以"函数"形式体现 a. 方法:完成类中各种计算或功能的操作,不能和类同名.不能和类中其他成员同名 b. 属性:定义类的值,并对

C++ Primer 笔记——OOP

1.基类通常都应该定义一个虚析构函数,即使该函数不执行任何实际操作也是如此. 2.任何构造函数之外的非静态函数都可以是虚函数,关键字virtual只能出现在类内部的声明语句之前而不能用于类外部的函数定义.如果基类把一个函数声明成虚函数,则该函数在派生类中隐式地也是虚函数.成员函数如果没有被声明成虚函数,则其解析过程发生在编译时而非运行时. 3.继承的访问说明符的作用是控制派生类从基类继承而来的成员是否对派生类用户可见. 4.在一个对象中,继承自基类的部分和派生类自定义的部分不一定是连续存储的.C

PHP OOP 面向对象的特性

一. OOP 的封装 隐藏对象的字段和实现细节,仅对外公开接口,控制在程序中字段的读和修改的访问级 别:将抽象得到的数据和行为(或功能)相结合,形成 一个有机的整体,也就是将数据与 操作数据的源代码进行有机的结合,形成"类",其中数据和函数都是类的成员. 字段的作用域 1.public 公共的 (类外可以访问) 2.private 私有的 (类内可以访问) 3.protected 受保护的 (类内和子类可以访问,类外不可访问) 创建使用了私有的字段,这样外部就无法访问了 class C

js oop中的三种继承方法

JS OOP 中的三种继承方法: 很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分. <继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方法.(继承的两方,发生在两个类之间)> 一.通过object实现继承 1:定义父类 function Parent(){} 2:定义子类 funtion Son(){} 3:通过原型给Object对象添加一个扩展方法. Object.prototype.customExtend = function(p

面向对象 OOP

[面向对象编程OOP] 1 语言的分类 面向机器 :汇编语言 面向过程 :c语言 面向对象 :c++ Java PHP等 2 面向过程与面向对象 面向过程:专注于如何去解决一个问题的过程,编程特点是一个函数去实现过程操作,没有类与对象的概念 面向对象:专注于有哪一个对象实体去解决这个问题,编程特点是:出现一个个的类,由类去生成对象 [面向对象的三大特征] 继承 封装 多态 类与对象的关系 1类 : 一群有相同特征(属性)和行为(方法)的集合 人类 属性:身高 ,年龄.体重, 方法:吃饭 睡觉 敲

跟着百度学PHP[4]OOP面对对象编程-7-OOP的一些关键子讲解

面对对象常用的一些关键子:http://www.cnblogs.com/xishaonian/p/6146794.html排版不是很好望见谅. THE END 跟着百度学PHP[4]OOP面对对象编程-7-OOP的一些关键子讲解

跟着百度学PHP[4]OOP面对对象编程-5-内部引用$this

$this就是对象内部代表这个对象的引用 可以调用被封装的方法或者属性! <?php class Person{ private $name; private $age="21"; var $sex; function play(){ echo "他正在玩儿呢"; } private function Hello(){ //使用private封装hello方法.该方法不可直接调用.但是可以在内部使用$this调用. echo "这个是被封装的内容&q