PHP面向对象学习笔记之一 基础概念


Posted in PHP onOctober 06, 2012

1> if( "false" ) 等效于 if( true), 因为非空字符串是true
2> 检查数据类型:
is_array();
is_object();
is_string();
is_null();
is_integer();
3> PHP5 引入类的类型提示(type hint),用来约束一个方法的参数类型(不是基本数据类型,而是类):将类名放在需要约束的方法参数之前.
例如: function write( ShopProduct $shopProduct){}

4> instanceof 操作符: 如果左边操作数的对象是右边操作数所示的类型,结果为true
例如: if( $shopProduct instanceof BookProduct ) {}

5> 继承 class son extends parent{}
要调用父类的方法, 比如构造函数,用 parent::__construct();

6> 静态方法和属性
class StaticExample{
static public $a;
static public function hello(){}
}
外部访问使用::
例如: print StaticExample::$a;
内部访问使用self::
例如: self::$a;

7> 抽象类, 抽象方法
abstract class xxx{
...
abstract function write(); //没有{}
}

抽象类的子类要重新声明方法并实现之. 新实现的方法的访问控制不能比抽象方法的访问控制更严格.

8>接口 interface
只定义功能,不包含实现. 接口中可以包含属性和方法声明,但方法体为空;
例如: interface a{
public function b();
}
任何实现接口的类都要实现接口中定义的所有方法,否则就必须是抽象类.
类在声明中使用implements来实现某个接口.
class Shop implements a{
public function b(){
...
}
}

9> 异常 exception
PHP5引入异常类

10>拦截器 interceptor
__get($property); 访问未定义的属性时被调用
__set($property,$value); 给未定义的属性赋值时被调用
__isset($property); 对未定义的属性使用isset()时被调用;
__unset($property);对未定义的属性调用unset()时被调用;
__call($method, $arg_array); 调用未定义的方法时候被调用
例: __get()的实现

function __get($property){ 
$method="get{$property}"; 
if(method_exists($this,$method)){ 
return $this->$method(); 
} 
} function getName(){ return "Bob";} 
function __isset($property){ 
$method="get{$porperty}"; 
return(method_exists($this, $method)); 
} 
function __set($property, $value){ 
$method="set{$property}"; 
if( method_exists($this,$method)){ 
return $this->$method($value); 
} 
}

11> 析构方法 __destruct()

12> __clone(); 与clone关键字的区别
class CopyMe();
$first= new CopyMe();
$second=$first;
// PHP4 : $first和$second是两个完全不同的对象;
// PHP5: $first和$second指向同一个对象
PHP5中, 对象的赋值和传递都是引用.
如果要拷贝,就要用: $second= clone $first; //现在$first和$second是两个完全不同的对象,(by_value copy)
如果要想控制复制, 要通过实现一个特殊方法__clone()

13> 自动加载: __autoload()
PHP5引入__autoload()拦截器方法来自动包含类文件.当PHP遇到试图实例化一个未知类的操作时,会尝试调用__autoload()方法,并将类名当作字符串参数传递给它.
例如一个很简单的自动定位和包含策略:
function __autoload( $classname){
includ_once "$classname.php";
}

====================
14>使用字符串动态引用类

$classname="Task"; 
require_once("tasks/{$classname}.php); 
$myObj= new $classname(); 
$method="getTitle"; 
$myObj->$method(); //动态方法

15>类函数和对象函数
class_exist(); //检查类是否存在 
get_declared_classes(); //获得当前脚本进程中定义的所有类(array形式返回) 
get_class_methods();//类中所有的public方法列表(array) 
method_exist($objname,$method); //对象或类的方法是否存在 
is_callable();//对象或类的方法不仅存在,且能访问 
get_class_vars(); // 属性 
get_parent_class(类或对象名称); //父类 
is_subclass_of(); //是否子类,不管接口,接口用 instanceof操作符

16>反射API
由一系列可以分析属性、方法、类和参数的内置类构成,可以动态获取信息,动态调用方法.
PHP 相关文章推荐
PHP set_time_limit(0)长连接的实现分析
Mar 02 PHP
AMFPHP php远程调用(RPC, Remote Procedure Call)工具 快速入门教程
May 10 PHP
php tp验证表单与自动填充函数代码
Feb 22 PHP
php如何调用webservice应用介绍
Nov 24 PHP
php中getservbyport与getservbyname函数用法实例
Nov 18 PHP
php实现微信公众平台账号自定义菜单类
Dec 02 PHP
php实现检查文章是否被百度收录
Jan 27 PHP
php定时执行任务设置详解
Feb 06 PHP
PHP附件下载中文名称乱码的解决方法
Dec 17 PHP
PHP图片裁剪与缩放示例(无损裁剪图片)
Feb 08 PHP
PHP基于socket实现的简单客户端和服务端通讯功能示例
Jul 10 PHP
CI框架附属类用法分析
Dec 26 PHP
php生成局部唯一识别码LUID的代码
Oct 06 #PHP
PHP实现提取一个图像文件并在浏览器上显示的代码
Oct 06 #PHP
PHP中3种生成XML文件方法的速度效率比较
Oct 06 #PHP
PHP中的生成XML文件的4种方法分享
Oct 06 #PHP
PHP 正则表达式之正则处理函数小结(preg_match,preg_match_all,preg_replace,preg_split)
Oct 05 #PHP
PHP正则表达式之定界符和原子介绍
Oct 05 #PHP
PHP超级全局变量数组小结
Oct 04 #PHP
You might like
PHP时间戳使用实例代码
2008/06/07 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
php获取英文姓名首字母的方法
2015/07/13 PHP
使用PHP uniqid函数生成唯一ID
2015/11/18 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
php use和include区别总结
2019/10/13 PHP
JQuery 无废话系列教程(一) jquery入门 [推荐]
2009/06/23 Javascript
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
script的async属性以非阻塞的模式加载脚本
2013/01/15 Javascript
jquery $.fn $.fx是什么意思有什么用
2013/11/04 Javascript
JQuery实现左右滚动菜单特效
2015/09/28 Javascript
jQuery中$.each()函数的用法引申实例
2016/05/12 Javascript
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
禁用backspace网页回退功能的实现代码
2016/11/15 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
详解使用webpack打包编写一个vue-toast插件
2017/11/08 Javascript
JS实现小球的弹性碰撞效果
2017/11/11 Javascript
微信小程序 如何获取网络状态
2019/07/26 Javascript
新手入门js闭包学习过程解析
2019/10/08 Javascript
[01:20]PWL S2开团时刻第三期——团战可以输 蝙蝠必须死
2020/11/26 DOTA
python正则表达式re模块详细介绍
2014/05/29 Python
python3操作mysql数据库的方法
2017/06/23 Python
python实现随机漫步算法
2018/08/27 Python
python cumsum函数的具体使用
2019/07/29 Python
Python如何输出整数
2020/06/07 Python
详解HTML5通讯录获取指定多个人的信息
2016/12/20 HTML / CSS
德国BA保镖药房韩文网:kr.ba.de
2017/09/04 全球购物
全球速卖通俄罗斯站:AliExpress俄罗斯
2019/06/17 全球购物
Linux如何命名文件--使用文件名时应注意
2014/05/29 面试题
致标枪运动员加油稿
2014/02/15 职场文书
主题班会演讲稿
2014/05/22 职场文书
优秀实习生主要事迹
2014/05/29 职场文书
新教师培训方案
2014/06/08 职场文书
高中同学会致辞
2015/08/01 职场文书
个人职业生涯规划之自我评估篇
2019/09/03 职场文书