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 相关文章推荐
Smarty安装配置方法
Apr 10 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
php中的四舍五入函数代码(floor函数、ceil函数、round与intval)
Jul 14 PHP
PHP 实现判断用户是否手机访问
Jan 21 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
php中namespace及use用法分析
Dec 06 PHP
phpStudy配置多站点多域名和多端口的方法
Sep 01 PHP
Laravel程序架构设计思路之使用动作类
Jun 07 PHP
PHP7引入的"??"和"?:"的区别讲解
Apr 08 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
Jul 22 PHP
laravel-admin 中列表筛选方法
Oct 03 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 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
基于Snoopy的PHP近似完美获取网站编码的代码
2011/10/23 PHP
PHP的5个安全措施小结
2012/07/17 PHP
php设计模式之单例、多例设计模式的应用分析
2013/06/30 PHP
MyEclipse常用配置图文教程
2014/09/11 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
JavaScript中yield实用简洁实现方式
2010/06/12 Javascript
javascript中的关于类型转换的性能优化
2010/12/14 Javascript
10个基于浏览器的JavaScript调试工具分享
2013/02/07 Javascript
Jquery attr("checked") 返回checked或undefined 获取选中失效
2013/10/10 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
JS实现倒计时和文字滚动的效果实例
2014/10/29 Javascript
Javascript实现Web颜色值转换
2015/02/05 Javascript
JS验证IP,子网掩码,网关和MAC的方法
2015/07/02 Javascript
基于jquery实现放大镜效果
2015/08/17 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
VUE脚手架具体使用方法
2019/05/20 Javascript
Jquery异步上传文件代码实例
2019/11/13 jQuery
vue实现移动端图片上传功能
2019/12/23 Javascript
[57:22]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第五场
2018/04/10 DOTA
[36:33]完美世界DOTA2联赛循环赛 Matador vs Forest 第一场 11.06
2020/11/06 DOTA
Python中os.path用法分析
2015/01/15 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
基于python实现复制文件并重命名
2020/09/16 Python
css3 响应式媒体查询的示例代码
2019/09/25 HTML / CSS
美国男女折扣服饰百货连锁店:Stein Mart
2017/05/02 全球购物
打架检讨书50字
2014/01/11 职场文书
宣传策划类求职信范文
2014/01/31 职场文书
无财产无子女离婚协议书范文
2014/09/14 职场文书
局机关干部群众路线个人对照检查材料思想汇报
2014/10/05 职场文书
个人作风建设总结
2014/10/23 职场文书
教师个人培训总结
2015/02/11 职场文书
2015年教师自我评价范文
2015/03/04 职场文书
餐厅收银员岗位职责
2015/04/07 职场文书
外出听课学习心得体会
2016/01/15 职场文书
MySQL的索引你了解吗
2022/03/13 MySQL