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 Session变量不能传送到下一页的解决方法
Nov 27 PHP
php短域名转换为实际域名函数
Jan 17 PHP
使用dump函数,给php加断点测试
Jun 25 PHP
PHP制作万年历
Jan 07 PHP
使用 PHPStorm 开发 Laravel
Mar 24 PHP
php使用指定编码导出mysql数据到csv文件的方法
Mar 31 PHP
PHP常见漏洞攻击分析
Feb 21 PHP
php实现查询功能(数据访问)
May 23 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
Nov 14 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
Jan 16 PHP
Thinkphp5框架简单实现钩子(Hook)行为的方法示例
Sep 03 PHP
Laravel获取所有的数据库表及结构的方法
Oct 10 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 GUID生成函数和类
2014/03/10 PHP
php+ajax注册实时验证功能
2016/07/20 PHP
php+mysql+ajax 局部刷新点赞/取消点赞功能(每个账号只点赞一次)
2020/07/24 PHP
imagettftext() 失效,不起作用
2021/03/09 PHP
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jQuery后代选择器用法实例
2014/12/23 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
JS实现焦点图轮播效果的方法详解
2016/12/19 Javascript
JavaScript实现简单精致的图片左右无缝滚动效果
2017/03/16 Javascript
JavaScript数组的5种迭代方法
2017/09/29 Javascript
vue加载自定义的js文件方法
2018/03/13 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
[42:11]TNC vs Pain 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
Python内置的字符串处理函数整理
2013/01/29 Python
python二叉树的实现实例
2013/11/21 Python
讲解Python中if语句的嵌套用法
2015/05/14 Python
python常见排序算法基础教程
2017/04/13 Python
Python中将两个或多个list合成一个list的方法小结
2019/05/12 Python
python做反被爬保护的方法
2019/07/01 Python
基于Django框架的权限组件rbac实例讲解
2019/08/31 Python
Python实现分数序列求和
2020/02/25 Python
CentOS 7如何实现定时执行python脚本
2020/06/24 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
利用CSS3实现的文字定时向上滚动
2016/08/29 HTML / CSS
动物学专业毕业生求职信
2013/10/11 职场文书
四年大学生活的个人自我评价
2013/12/11 职场文书
机关道德讲堂实施方案
2014/03/15 职场文书
家长寄语大全
2014/04/02 职场文书
大学生个人先进事迹材料范文
2014/05/03 职场文书
护士节策划方案
2014/05/19 职场文书
美术社团活动总结
2014/06/27 职场文书
毕业生自荐信范文
2015/03/05 职场文书
2015年教师党员个人总结
2015/11/24 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
Python实现双向链表基本操作
2022/05/25 Python