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 相关文章推荐
discuz7 phpMysql操作类
Jun 21 PHP
Windows下安装Memcached的步骤说明
Apr 25 PHP
php的memcached客户端memcached
Jun 14 PHP
apache php模块整合操作指南
Nov 16 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
Jan 23 PHP
解析php5配置使用pdo
Jul 03 PHP
php+ajax实现无刷新动态加载数据技术
Apr 28 PHP
PHP实现简单数字分页效果
Jul 26 PHP
CodeIgniter框架基本增删改查操作示例
Mar 23 PHP
php 可变函数使用小结
Jun 12 PHP
php-fpm中max_children的配置
Mar 15 PHP
PHP微信网页授权的配置文件操作分析
May 29 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
我的论坛源代码(十)
2006/10/09 PHP
浅析php中如何在有限的内存中读取大文件
2013/07/02 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
js获取单选框或复选框值及操作
2012/12/18 Javascript
关闭时刷新父窗口两种方法
2014/05/07 Javascript
JavaScript动态提示输入框输入字数的方法
2015/07/27 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
vue通过watch对input做字数限定的方法
2017/07/13 Javascript
Django+Vue.js搭建前后端分离项目的示例
2017/08/07 Javascript
关于jquery layui弹出层的使用方法
2018/04/21 jQuery
微信小程序实现左侧滑动导航栏
2020/04/08 Javascript
[01:30]2016国际邀请赛中国区预选赛神秘商店火爆开启
2016/06/26 DOTA
python实现猜数字游戏(无重复数字)示例分享
2014/03/29 Python
Python中的高级函数map/reduce使用实例
2015/04/13 Python
Python正则表达式经典入门教程
2017/05/22 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
使用python生成目录树
2018/03/29 Python
解决PyCharm import torch包失败的问题
2018/10/13 Python
Python字符串的常见操作实例小结
2019/04/08 Python
django 中QuerySet特性功能详解
2019/07/25 Python
pycharm中leetcode插件使用图文详解
2020/12/07 Python
详解Css3新特性应用之过渡与动画
2017/01/10 HTML / CSS
日本最大的彩色隐形眼镜销售网站:CharmColor
2020/09/09 全球购物
中专药剂专业应届毕的自我评价
2013/12/27 职场文书
销售团队激励口号
2014/06/06 职场文书
本科毕业生应聘求职信
2014/07/06 职场文书
励志演讲稿500字
2014/08/21 职场文书
庆祝教师节标语
2014/10/09 职场文书
涉及车辆房产分割的离婚协议书范文
2014/10/12 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
JavaScript原型链详解
2021/11/07 Javascript
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
SQL Server 中的事务介绍
2022/05/20 SQL Server