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 adodb连接带密码access数据库实例,测试成功
May 14 PHP
jQuery Mobile + PHP实现文件上传
Dec 12 PHP
CentOS安装php v8js教程
Feb 26 PHP
php实现从上传文件创建缩略图的方法
Apr 02 PHP
android上传图片到PHP的过程详解
Aug 03 PHP
php冒泡排序与快速排序实例详解
Dec 07 PHP
Zend Framework教程之Zend_Config_Ini用法分析
Mar 23 PHP
php分页查询的简单实现代码
Mar 14 PHP
php实现保存周期为1天的购物车类
Jul 07 PHP
PHP-X系列教程之内置函数的使用示例
Oct 16 PHP
PHP ADODB生成下拉列表框功能示例
May 29 PHP
php设计模式之代理模式分析【星际争霸游戏案例】
Mar 23 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(一)
2012/03/21 PHP
PHP Mysqli 常用代码集合
2016/11/12 PHP
JS弹出窗口代码大全(详细整理)
2012/12/21 Javascript
jQuery使用动态渲染表单功能完成ajax文件下载
2013/01/15 Javascript
利用JS来控制键盘的上下左右键(示例代码)
2013/12/14 Javascript
jQuery中通过ajax的get()函数读取页面的方法
2016/02/29 Javascript
基于Bootstrap+jQuery.validate实现表单验证
2016/05/30 Javascript
jquery 中toggle的2种用法详解(推荐)
2016/09/02 Javascript
AngularJs $parse、$eval和$observe、$watch详解
2016/09/21 Javascript
vue-axios使用详解
2017/05/10 Javascript
vue 实现axios拦截、页面跳转和token 验证
2018/07/17 Javascript
ES6数组与对象的解构赋值详解
2019/06/14 Javascript
vue登录注册实例详解
2019/09/14 Javascript
Nodejs封装类似express框架的路由实例详解
2020/01/05 NodeJs
Python实现冒泡,插入,选择排序简单实例
2014/08/18 Python
python常见的格式化输出小结
2016/12/15 Python
python实现数独游戏 java简单实现数独游戏
2018/03/30 Python
PyCharm代码整体缩进,反向缩进的方法
2018/06/25 Python
Python import与from import使用及区别介绍
2018/09/06 Python
Django中create和save方法的不同
2019/08/13 Python
Python连接SQLite数据库并进行增册改查操作方法详解
2020/02/18 Python
Win 10下Anaconda虚拟环境的教程
2020/05/18 Python
完美解决keras 读取多个hdf5文件进行训练的问题
2020/07/01 Python
python线程里哪种模块比较适合
2020/08/02 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
html5跨域通讯之postMessage的用法总结
2013/11/07 HTML / CSS
.net工程师笔试题
2012/06/09 面试题
优秀中学生事迹材料
2014/01/31 职场文书
领导批评与自我批评范文
2014/10/16 职场文书
开学典礼观后感
2015/06/15 职场文书
2016毕业实习单位评语大全
2015/12/01 职场文书
2017元旦、春节期间廉洁自律承诺书
2016/03/25 职场文书
2019辞职报告范本3篇!
2019/07/23 职场文书
大学生党员暑假实践(活动总结)
2019/08/21 职场文书
《亲亲我的妈妈》观后感(3篇)
2019/09/26 职场文书