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基础学习笔记
Mar 18 PHP
Smarty安装配置方法
Apr 10 PHP
一个php Mysql类 可以参考学习熟悉下
Jun 21 PHP
又一个php 分页类实现代码
Dec 03 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
Mar 07 PHP
PHP判断远程图片是否存在的几种方法
May 04 PHP
php集成环境xampp中apache无法启动问题解决方案
Nov 18 PHP
配置php.ini实现PHP文件上传功能
Nov 27 PHP
ThinkPHP项目分组配置方法分析
Mar 23 PHP
PHP长网址与短网址的实现方法
Oct 13 PHP
Ecshop 后台添加新功能栏目及管理权限设置教程
Nov 21 PHP
laravel 框架实现无限级分类的方法示例
Oct 31 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将向Java靠拢
2006/10/09 PHP
javascript,php获取函数参数对象的代码
2011/02/03 PHP
php跨域cookie共享使用方法
2014/02/20 PHP
php常用正则函数实例小结
2016/12/29 PHP
javascript如何创建表格(javascript绘制表格的二种方法)
2013/12/10 Javascript
jQuery Trim去除字符串首尾空字符的实现方法说明
2014/02/11 Javascript
iframe调用父页面函数示例详解
2014/07/17 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
针对初学者的jQuery入门指南
2015/08/15 Javascript
jQuery中hover与mouseover和mouseout的区别分析
2015/12/24 Javascript
JS组件Bootstrap Table布局详解
2016/05/27 Javascript
layui table 表格上添加日期控件的两种方法
2019/09/28 Javascript
为react组件库添加typescript类型提示的方法
2020/06/15 Javascript
Python strip lstrip rstrip使用方法
2008/09/06 Python
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
详解Django中的ifequal和ifnotequal标签使用
2015/07/16 Python
python出现"IndentationError: unexpected indent"错误解决办法
2017/10/15 Python
详解python eval函数的妙用
2017/11/16 Python
python生成圆形图片的方法
2020/03/25 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
CSS3制作3D立方体loading特效
2020/11/09 HTML / CSS
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
HTML5自定义mp3播放器源码
2020/01/06 HTML / CSS
旧时光糖果:Old Time Candy
2018/02/05 全球购物
绘儿乐产品官方在线商店:Crayola.com
2019/09/07 全球购物
xml有哪些解析技术?区别是什么
2016/04/26 面试题
Internet体系结构
2014/12/21 面试题
银行自荐信范文
2013/10/07 职场文书
伦敦奥运会口号
2014/06/13 职场文书
解除劳动合同协议书范本2014
2014/09/25 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
小学新教师个人总结
2015/02/05 职场文书
五四青年节活动总结
2015/02/10 职场文书
2019各种承诺书范文
2019/06/24 职场文书
ThinkPHP5和ThinkPHP6的区别
2021/03/31 PHP
Flink 侧流输出源码示例解析
2022/09/23 Servers