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
递归删除一个节点以及该节点下的所有节点示例
Mar 19 PHP
php格式输出文件var_export函数实例
Nov 15 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
两种php给图片加水印的实现代码
Apr 18 PHP
Symfony的安装和配置方法
Mar 17 PHP
php mysqli查询语句返回值类型实例分析
Jun 29 PHP
php处理单文件、多文件上传代码分享
Aug 24 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
Dec 29 PHP
PHP流Streams、包装器wrapper概念与用法实例详解
Nov 17 PHP
Laravel关联模型中过滤结果为空的结果集(has和with区别)
Oct 18 PHP
laravel框架中间件简单使用方法示例
Jan 25 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实现浏览器点击下载TXT文档的方法详解
2013/06/02 PHP
Yii结合CKEditor实现图片上传功能
2014/06/13 PHP
jQuery Mobile + PHP实现文件上传
2014/12/12 PHP
php实现将数组转换为XML的方法
2015/03/09 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
PHP如何实现订单的延时处理详解
2017/12/30 PHP
JavaScript replace(rgExp,fn)正则替换的用法
2010/03/04 Javascript
JQuery中关于jquery.js与jquery.min.js的比较探讨
2013/05/15 Javascript
JSON.stringify转换JSON时日期时间不准确的解决方法
2014/08/08 Javascript
javascript几个易错点记录
2014/11/26 Javascript
javascript手风琴下拉菜单实现代码
2015/11/12 Javascript
jQuery Ajax 加载数据时异步显示加载动画
2016/08/01 Javascript
vue.js移动端app实战1:初始配置详解
2017/07/24 Javascript
jQuery实现基本淡入淡出效果的方法详解
2018/09/05 jQuery
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
antd-mobile ListView长列表的数据更新遇到的坑
2020/04/08 Javascript
Vue中使用wangeditor富文本编辑的问题
2021/02/07 Vue.js
使用BeautifulSoup爬虫程序获取百度搜索结果的标题和url示例
2014/01/19 Python
python实现list元素按关键字相加减的方法示例
2017/06/09 Python
Python实现爬取需要登录的网站完整示例
2017/08/19 Python
Python中存取文件的4种不同操作
2018/07/02 Python
pyqt弹出新对话框,以及关闭对话框获取数据的实例
2019/06/18 Python
python使用正则来处理各种匹配问题
2019/12/22 Python
Django更新models数据库结构步骤
2020/04/01 Python
英国一家集合了众多有才华设计师品牌的奢侈店:Wolf & Badger
2018/04/18 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
商业门面租房协议书
2014/11/25 职场文书
2014年实验室工作总结
2014/12/03 职场文书
店长岗位职责
2015/02/11 职场文书
在职人员跳槽求职信
2015/03/20 职场文书
学生通报表扬范文
2015/05/04 职场文书
建国大业观后感800字
2015/06/01 职场文书
毕业证明模板
2015/06/19 职场文书
七个Python必备的GUI库
2021/04/27 Python
解决Golang time.Parse和time.Format的时区问题
2021/04/29 Golang
Python编写冷笑话生成器
2022/04/20 Python