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 URL地址获取函数代码(端口等) 推荐
May 15 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
May 07 PHP
php中将指针移动到数据集初始位置的实现代码[mysql_data_seek]
Nov 01 PHP
解析yahoo邮件用phpmailer发送的实例
Jun 24 PHP
使用php判断服务器是否支持Gzip压缩功能
Sep 24 PHP
浅析php数据类型转换
Jan 09 PHP
解决php接收shell返回的结果中文乱码问题
Jan 23 PHP
PHP定时任务延缓执行的实现
Oct 08 PHP
10个超级有用的PHP代码片段果断收藏
Sep 23 PHP
PHP 将dataurl转成图片image方法总结
Oct 14 PHP
PHP实现简易用户登录系统
Jul 10 PHP
PHP程序守护进程化实现方法详解
Jul 16 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
第七节 类的静态成员 [7]
2006/10/09 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
php页面函数设置超时限制的方法
2014/12/01 PHP
Yii2实现让关联字段支持搜索功能的方法
2016/08/10 PHP
默认让页面的第一个控件选中的javascript代码
2009/12/26 Javascript
用nodejs写的一个简单项目打包工具
2013/05/11 NodeJs
Nodejs异步回调的优雅处理方法
2014/09/25 NodeJs
在AngularJS应用中实现一些动画效果的代码
2015/06/18 Javascript
jQuery动态改变多行文本框高度的方法
2016/09/07 Javascript
实现easyui的datagrid导出为excel的示例代码
2016/11/10 Javascript
Angular.js中数组操作的方法教程
2017/07/31 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
node打造微信个人号机器人的方法示例
2018/04/26 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
对angularJs中controller控制器scope父子集作用域的实例讲解
2018/10/08 Javascript
node实现爬虫的几种简易方式
2019/08/22 Javascript
微信小程序顶部导航栏可滑动并选中放大
2019/12/05 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[01:12:08]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第一场 8.24
2019/09/10 DOTA
[01:22:29]真视界:2019年国际邀请赛总决赛
2020/01/29 DOTA
[01:01:23]完美世界DOTA2联赛PWL S2 Forest vs FTD.C 第一场 11.26
2020/11/30 DOTA
使用python装饰器验证配置文件示例
2014/02/24 Python
跟老齐学Python之集合的关系
2014/09/24 Python
python 正确保留多位小数的实例
2018/07/16 Python
Python3+Appium安装使用教程
2019/07/05 Python
Python函数中的可变长参数详解
2019/09/12 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
django 连接数据库出现1045错误的解决方式
2020/05/14 Python
pycharm 实现本地写代码,服务器运行的操作
2020/06/08 Python
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
Auguste The Label官网:澳大利亚一家精品女装时尚品牌
2020/06/14 全球购物
董事长助理工作职责
2014/06/08 职场文书
军训新闻稿范文
2015/07/17 职场文书
Tomcat弱口令复现及利用
2022/05/06 Servers
Python中的 No Module named ***问题及解决
2022/07/23 Python
JS前端使用Canvas快速实现手势解锁特效
2022/09/23 Javascript