1, php面向对象编程的三大特征:

(1) 封装性,封装就是把抽象出的数据和对数据的操作封装在一起,数据被保护在内部,程序的其它部分只有通过被授权的操作(成员方法)才能对数据进行操作。

(2) 继承性,继承就是一个子类通过extends父类,把父类的(public/protected)属性和(public/protected)方法继承下来。

(3) 多态性,多态性体现在类中方法的重载和方法的覆盖。

(4) 抽象性,我们定义一个类的时候,实际把一类事物的共有属性和行为提取出来,形成一个物理模型,这种研究问题的方法称为抽象。

2, 封装性

public:        类的内部子类外部都可以访问;

protected:  类的内部子类可以访问;

private:      只有类的内部可以访问。

如果在类的外部访问protected和private变量,需要使用public属性的成员方法,比如__get(),__set();php的成员函数默认为public。

3, 继承性

(1)子类可以继承父类的public和protected属性和方法。

(2)一个类只能继承一个父类,如果希望继承多个类的属性和方法,需要多层继承。

(3)当创建子类对象时候,默认不会调用父类的构造方法(这点和Java是不同的)。

(4)如果子类想去调用父类的构造方法,或者其他的方法(public/protectd),可以这样处理类名::方法名()或者parent::方法名()。

(5)如果子类中方法与父类相同,我们称方法重写或方法覆盖。

4, 方法重载

“重载”是类的多态的一种体现,函数重载指一个标识符被用作多个函数名,且能够通过函数的参数个数或参数类型将这些同名的函数区分开来,调用不发生混淆。调用的时候,虽然方法名字相通,但根据参数表可以自动调用对应的函数。

重载:函数名一样,通过函数的参数个数或者参数类型不同,达到调用同一个函数名,但是可以区分不同的函数。

(1)PHP5虽然可以支持重载,但重载在具体实现上,和其他语言还有较大的差别。如果你试图定义多个同名函数,那你的程序运行时将会报错。看下面案例:

class A{

    public function test1(){

        echo "test1";

    }

    public function test1($a){

        echo "test1 hello";

    }

}

$a = new A();

$a->test1();

$a->test1(456);

  以上实例适用于C++、Java,但是不适用于PHP。

(2)php通过魔术函数实现重载,但这并不推荐。

class A{
public function test1($p){
echo "接收一个参数";
}
public function test2($p){
echo "接收两个参数";
} //此处提供一个__call魔法函数
//当一个对象调用某个方法,而此方法不存在时候,系统会自动调用__call(),把方法名字作为__call的第一个参数,方法所有参数作为__call的第二个参数。
function __call($method,$p){
if($method == "test"){
if(count($p) == 1){
$this->test1($p);
}else if(count($p) == 2){
$this->test2($p);
}
}
}
}
$a = new A();
$a->test(1);

小结:关于重载

(1)    php5默认情况下不直接支持方法重载。

(2)    php5可以同__call魔术方法,模拟重载效果。

5, 方法的重写/方法的覆盖,当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法如何去写,可以让子类去覆盖这个方法。

class Animal{

    public function cry(){

        echo '动物叫';

    }

}

class Cat extends Animal{

    public function cry(){

        echo "猫叫";

    }

}

$cat1 = new Cat();

$cat1->cry();

(1)     要实现重写,要求子类和父类的方法名字,参数列表必须完全一样。

(2)     如果子类调用父类的某个方法(public/protected),则可以使用parent::方法()或父类名::方法()。

(3)     子类重写父类方法时候,不能缩小父类方法的权限。扩大父类权限没有出错。

当子类没有覆盖父类的方法,子类调用父类的方法;当子类覆盖了父类的方法,子类会调用自己的方法,这也体现了多态性。

php面向对象编程_1的更多相关文章

  1. 三、java面向对象编程_1

    目录 一.对象和类的概念 二.对象和引用 1.对象 2.成员变量 3.引用 三.java类的定义 四.构造函数(构造方法) 五.内存分析 一.对象和类的概念 1.对象 对象用计算机语言对应问题域中事物 ...

  2. Python入门基础(9)__面向对象编程_1

    定义一个只包含方法的类 class 类名: def 方法1(self,参数列表): pass def 方法2(self,参数列表): pass 当一个类定义之后,要使用这个类来创键对象.语法如下: 对 ...

  3. angular2系列教程(六)两种pipe:函数式编程与面向对象编程

    今天,我们要讲的是angualr2的pipe这个知识点. 例子

  4. 带你一分钟理解闭包--js面向对象编程

    上一篇<简单粗暴地理解js原型链--js面向对象编程>没想到能攒到这么多赞,实属意外.分享是个好事情,尤其是分享自己的学习感悟.所以网上关于原型链.闭包.作用域等文章多如牛毛,很多文章写得 ...

  5. PHP 面向对象编程和设计模式 (1/5) - 抽象类、对象接口、instanceof 和契约式编程

    PHP高级程序设计 学习笔记 2014.06.09 什么是面向对象编程 面向对象编程(Object Oriented Programming,OOP)是一种计算机编程架构.OOP 的一条基本原则是计算 ...

  6. Delphi_09_Delphi_Object_Pascal_面向对象编程

    今天这里讨论一下Delphi中的面向对象编程,这里不做过多过细的讨论,主要做提纲挈领的描述,帮助自己抓做重点. 本随笔分为两部分: 一.面向对象编程 二.面向对象编程详细描述 ------------ ...

  7. python基础-面向对象编程

    一.三大编程范式 编程范式即编程的方法论,标识一种编程风格 三大编程范式: 1.面向过程编程 2.函数式编程 3.面向对象编程 二.编程进化论 1.编程最开始就是无组织无结构,从简单控制流中按步写指令 ...

  8. 面向对象编程(OOP)

    什么是面向对象编程,对于面向对象编程与面向过程编程的解释随处可见,个人认为对面向对象编程解释最好的一个定义是:依赖倒转原则是面向对象编程的标志,面向对象编程是一种思想,无论使用哪一种编程语言,如果在编 ...

  9. python 学习笔记7 面向对象编程

    一.概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发"更快更好更强..." ...

随机推荐

  1. Visual Studio Find All no results.

    重装WDK什么的有时候有bug....写下面注册表修复 Windows Registry Editor Version 5.00 [HKEY_CLASSES_ROOT\Wow6432Node\CLSI ...

  2. SaltStack 运行机理特点

    SaltStack 运行机理特点 1.实时通讯(REAL-TIME COMMUNICATION) 所有 Salt minions 接收命令都是同时的,这意味着控制 10 个或者 10000 个系统所消 ...

  3. 【HDU 6191】Query on A Tree 【可持久化字典树】

    题目 给出一棵有n个结点的树,树根是1,每个结点给出一个value.然后给出q个询问,每个询问给出两个整数u和x,你要在以u结点为根的子树中找出一个结点v,使得val[v] xor x最大, 并输出这 ...

  4. require.js的用法(转)

    一.为什么要用require.js? 最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代 ...

  5. yii2.0 报错Cookievalidationkey Must Be Configured With A Secret Key

    'components' => [ 'request' => [ // !!! insert a secret key in the following (if it is empty) ...

  6. SecureCRT 下MySQL中文乱码问题终极解决方案-乾颐堂

    一.查看Linux主机系统字符集 命令: echo $LANG [root@pythontab.com ~]# echo $LANG [root@pythontab.com ~]# en_US.UTF ...

  7. AutoComplete的extraParams动态传递参数

    AutoComplete可利用extraParams传递参数,如 extraParams:{para1:'参数1',para2:'参数2'} 但是,如需动态取值作为参数值时却无法达到期望目的,可改为配 ...

  8. Log4j配置(转)

    原文:http://www.blogjava.net/zJun/archive/2006/06/28/55511.html Log4J的配置文件(Configuration File)就是用来设置记录 ...

  9. javascript总结19:javascript 使用概述

    1 JS作用 1.验证表单(以前的网速慢)`` 2.页面特效(PC端的网页效果) 3.移动端(移动web和app) 4.异步和服务器交互(AJAX) 5.服务端开发(nodejs) 2 浏览器的主要构 ...

  10. CodeForces 288C Polo the Penguin and XOR operation (位运算,异或)

    题意:给一个数 n,让你求一个排列,使得这个排列与0-n的对应数的异或之最大. 析:既然是异或就得考虑异或的用法,然后想怎么才是最大呢,如果两个数二进制数正好互补,不就最大了么,比如,一个数是100, ...