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中文件上传的安全问题
Oct 09 PHP
一个没有MYSQL数据库支持的简易留言本的编写
Oct 09 PHP
smarty section简介与用法分析
Oct 03 PHP
PHP中使用CURL伪造来路抓取页面或文件
May 04 PHP
apache mysql php 源码编译使用方法
May 03 PHP
PHP图形操作之Jpgraph学习笔记
Dec 25 PHP
zend framework中使用memcache的方法
Mar 04 PHP
Yii开启片段缓存的方法
Mar 28 PHP
PHP控制前台弹出对话框的实现方法
Aug 21 PHP
Laravel中Facade的加载过程与原理详解
Sep 22 PHP
解决laravel5中auth用户登录其他页面获取不到登录信息的问题
Oct 08 PHP
Laravel (Lumen) 解决JWT-Auth刷新token的问题
Oct 24 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
第一个无线电台是由谁发明的
2021/03/01 无线电
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
php合并数组并保留键值的实现方法
2018/03/12 PHP
基于JQuery模仿苹果桌面的Dock效果(初级版)
2012/10/15 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
javascript放大镜效果的简单实现
2013/12/09 Javascript
关于jquery中全局函数each使用介绍
2013/12/10 Javascript
jquery自定义函数的多种方法
2014/01/09 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
总结javascript三元运算符知识点
2018/09/28 Javascript
javascript中的event loop事件循环详解
2018/12/14 Javascript
vue中axios请求的封装实例代码
2019/03/23 Javascript
vue 实现路由跳转时更改页面title
2019/11/05 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
rhythmbox中文名乱码问题解决方法
2008/09/06 Python
解决Python字典写入文件出行首行有空格的问题
2017/09/27 Python
Python实现判断并移除列表指定位置元素的方法
2018/04/13 Python
Jupyter中直接显示Matplotlib的图形方法
2018/05/24 Python
python 获取utc时间转化为本地时间的方法
2018/12/31 Python
详解Python3中setuptools、Pip安装教程
2019/06/18 Python
Python操作SQLite/MySQL/LMDB数据库的方法
2019/11/07 Python
python实现图像拼接
2020/03/05 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
如何基于Django实现上下文章跳转
2020/09/16 Python
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
Java中的异常处理机制的简单原理和应用
2013/04/27 面试题
大学生蛋糕店创业计划书
2014/01/13 职场文书
学校评语大全
2014/05/06 职场文书
保护黄河倡议书
2014/05/16 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
2019年暑期法院实习报告
2019/12/18 职场文书
Go语言切片前或中间插入项与内置copy()函数详解
2021/04/27 Golang
用Python爬虫破解滑动验证码的案例解析
2021/05/06 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA