1.$this就是这个对象的地址,$this不能在类外部使用.
2.构造函数 __construct 和析构函数都没有返回值;一旦一个对象成为垃圾对象(没有任何变量引用的对象,或者=null),析构函数 __destruct就会立即调用。析构函数不能传参数。
3.全局变量 global $a 在程序中都可以使用的变量(非面向对象)。
4.静态变量 public static $a 一个类的所有对象共享的变量(面向对象)。[类外访问] 类名::$a; [类内访问] 类名::$a 或者 self::$a
5.静态方法 public static function static_func_name(){ } 属于所有对象实例,静态方法只能操作静态变量;非静态方法既可以操作静态变量,也可以操作非静态变量。[类外访问] 类名:: static_func_name(); 或者 对象名-> static_func_name(); [类内访问] 类名:: static_func_name() 或者 self:: static_func_name()
6.关于访问修饰符:public(全局、继承类、本类);protected(继承类、本类);private(本类)。
7.继承 extends:子类默认不会调用父类的构造函数。[子类访问父类的方法(包括构造函数)] 父类::方法名(); 或者 parent::方法名(); 如果子类的方法和父类方法相同,称为 方法重写(或者叫:方法覆盖)。多态的体现:当子类没有覆盖父类的方法则调用父类的方法,当子类覆盖了父类的方法,则调用自己的方法。
8. 方法重载 overload(定义多个同名函数,我认为没这个必要),php5 默认不直接支持方法重载,使用__call魔术方法,模拟方法重载的效果。
9. 抽象类(可以是public/protected/private)和抽象方法是当父类的一些方法不能确定时会用到。抽象类 abstract class Obj{}; 抽象方法不能有方法体 abstract public function func_name(param1,...); 抽象类中可以没有抽象方法,但是抽象方法必须存在于抽象类中!如果A1类继承了一个抽象类 A,则要求A1类实现从A类继承的所有抽象方法
10.接口(更加抽象的抽象类,接口的方法都不能有方法体且必须是public,不能去实例化接口)。interface iJK{},class 类名 implements iJK,iJK2{}。接口中可以有属性,但是必须是常量,并且是public。 interface iUsb{ const A=90; //如果是 $a=90; 就会出错 } //要取到属性:iUsb::A; 一个接口不能继承其他的类,但是可以继承别的接口。一个接口可以继承多个其它的接口.当一个类去实现了某些接口,则必须把所有接口的方法都实现。 一个类可以同时继承他的父类,而且实现接口: class A1 extends A implements iUsb2,iUsb3{…}
11.final关键字:修饰类 或者 方法,不能修饰属性。 ① 希望某个类不能被继承: final class A{} ② 希望某个方法不能被子类重载(改写): class A{final public function func_name(){} }
12.const关键字:类中的常量。class 类名{const 常量名(大写)= 赋初值; } interface 接口名{const 常量名(大写)= 赋初值;} [调用方法]类名::常量名; 接口名::常量。在类的内部也可以使用 self::常量。
13.使用instanceof检测当前对象是否属于一个类的实例,返回布尔。get_class() 函数返回对象所属类的名字,如果不是对象则返回false。

[类的组合与继承]
1. 继承和多态都是对类进行复用,继承是类级别的复用,多态是方法级别的复用。
2. 子类继承父类的属性和方法,称为继承。
3. 在继承中,用parent指代父类,用self指代自身,用“:” 运算符(范围解析操作符)调用父类的方法。
4. 静态:如果声明类成员或方法为static,就可以不实例化类而直接访问,也不能用“:”访问一个非静态方法,如果这样会导致E_STRICT 级别的错误。php.ini: error_reporting=E_ALL | E_STRICT display_errors=On
5.继承最大的优点是扩展简单,但是其缺点大于优点。一般继承树不要多于三层。若要禁止被继承,使用final修饰符。

[接口 interface]
1. PHP 中接口的语义是有限的,使用接口的地方并不多,可以更多的使用抽象类。
2. SPL(标准PHP库),实现一些接口,最主要的就是iterator迭代器接口。
3. toString方法就是接口的一种变相实现;Traits可以被视为一种加强型的接口。
4. 接口只是一个声明,一旦使用interface关键字,就应该实现它。

[反射 ReflectionClass]
1.使用class函数返回对象属性的关联数组:
① get_object_vars($obj); //返回对象属性的关联数组
② echo get_class($obj); //获取对象属性列表所属的类
③ get_class_vars(get_class($obj)); //类属性
④ get_class_methods(get_class($obj)); //返回由类的方法名组成的数组
2. 反射完整的描述了一个类或者对象的原型,不仅可以用于类和对象,还可以用于函数、扩展模块、异常。
3. 反射的消耗很大,能找到替代方案的情况下就不要滥用。

【单例模式】

<?php
class demo{
private static $MyObject ; //保存对象的静态属性
private function __construct(){} //私有化构造函数
private function __clone(){} //禁止克隆
public static function getInstance(){
if(!(self::$MyObject instanceof self)){
self::$MyObject = new self;
}
return self::$MyObject;
}
}
?>

【魔术常量】

class moshu{
function __construct(){
echo "<br>".__LINE__; //当前的行数
echo "<br>".__FILE__; //当前文件绝对路径及文件名
echo "<br>".__DIR__; //当前文件绝对路径
echo "<br>".__CLASS__;//当前的类名
echo "<br>".__FUNCTION__; //当前的函数(方法)名
echo "<br>".__METHOD__; //类的方法名
echo "<br>".__NAMESPACE__; //命名空间[不常用]
}
}
$ms=new moshu();

PHP面向对象的一些深入理解的更多相关文章

  1. JavaScript--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  2. JS--我发现,原来你是这样的JS:面向对象编程OOP[1]--(理解对象和对象属性类型)

    一.介绍 老铁们,这次是JS的面向对象的编程OOP(虽然我没有对象,心累啊,但是可以自己创建啊,哈哈). JS高程里第六章的内容,这章内容在我看来是JS中很难理解的一部分.所以分成三篇博客来逐个理清. ...

  3. python面向对象开发的自我理解

    ​详细代码理解可以参考 笨鸟教程博客:http://www.runoob.com/python3/python3-class.html 面向对象经常被提起,那到底什么是面向对象呢? 它的基本概念:类, ...

  4. java面向对象编程思想的理解

    1.我们总说java是一门面向对象编程的语言,那什么是面向对象呢? 我是这样理解的,对象是事物存在的实体,如,猪.狗,花早等都是对象,对象由两部分组成.面向对象编程的三大特点:继承,多态,类是封装对象 ...

  5. 2017.12.25 Java中面向对象思想的深刻理解

    今日内容介绍 1.面向对象思想 2.类与对象的关系 3.局部变量和成员变量的关系 4.封装思想 5.private,this关键字 6.随机点名器 01面向对象和面向过程的思想 * A: 面向过程与面 ...

  6. 对Java面向对象中多态的理解

    理解的要点:多态意味着父亲的变量可以指向子类对象 面向对象程序设计的三大支柱是封装.继承和多态 封装对外把相应的属性和方法实现的细节进行了隐藏.继承关系使一个子类继承父亲的特征,并且加上了一些新的特征 ...

  7. js的面向对象的程序设计之理解继承

    来自<javascript高级程序设计 第三版:作者Nicholas C. Zakas>的学习笔记(六) 先来解析下标题——对象和继承~ 一.对象篇 ECMA-262把对象的定义为:&qu ...

  8. JS中面向对象的,对象理解、构造函数、原型、原型链

    6.1 理解对象 6.1.1 对象属性类型 ECMS属性有两种类型:数据属性和访问器属性 1 数据属性 [[configurable]] 表示能否通过Delete 删除属性从而从新定义属性,能否修改属 ...

  9. js面向对象的程序设计 --- 上篇(理解对象)

    前言 ECMAScript中没有类的概念,因此它们的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:"无序的集合属性,其属性可以包含基本值,对象或者函数".正因 ...

随机推荐

  1. 串口通信类,WPF

    参考之前的资料,写了一个自己常用的串口类, 字符串发送类型用了两种方式,char[] 和byte[] : 数据接收也是采用两种 char[] 和byte[] 两种. 类代码贴出来: public cl ...

  2. javaee学习之servlet

    一.tomcat相关知识 tomecat虚拟主机与虚拟路径 1.tomcat的应用默认放在webapps目录下面,可以将其放在其他目录分区,让tomcat进行管理吗? 答:当然可以.方法:配置虚拟目录 ...

  3. UIAlertView

    1.Title 获取或设置UIAlertView上的标题. 2.Message 获取或设置UIAlertView上的消息 UIAlertView *alertView = [[UIAlertViewa ...

  4. Mac 加密软件

    1,花了127块买一个mac 加密软件 hider2,发现他只是把整个文件加密后,加入到某个包里面,然后删除了原文件,这个简单的功能竟然要收取我这么多钱 2. 然后找个开源的加密软件:PGP, 有GU ...

  5. Hint

    select  /*+  first_rows(20)  */  *  from  t  where  id<20 --分页 select  /*+  all_rows  */  *  from ...

  6. linux bash history

    vim /etc/profile export HISTSIZE=10000 export HISTTIMEFORMAT="`whoami` : %F %T : " export ...

  7. interblock corruption & intrablock corruption

    interblock corruption: corruption blocks rather than within the block itself. can only be logical co ...

  8. java 笔记(5) —— 线程,yield,join

    一.线程各个状态与转换: 新建状态:用new语句创建的线程对象处于新建状态,此时它和其它的java对象一样,仅仅在堆中被分配了内存 .就绪状态:当一个线程创建了以后,其他的线程调用了它的start() ...

  9. oracle组建:ODAC112021Xcopy_x64,在开发机上,不用安装oracle的客户端等开发

    以下解决方案是为了连接远程服务器上的oracle 11g 的解决方案. 下载地址:http://www.oracle.com/technetwork/database/windows/download ...

  10. iOS中scrollview是否要回弹

    1. @property(nonatomic) BOOL bounces //当滚动到内容边缘是否发生反弹,default is YES.2. @property(nonatomic) BOOL al ...