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 相关文章推荐
phpmyadmin导入(import)文件限制的解决办法
Dec 11 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
php打造属于自己的MVC框架
Mar 07 PHP
解析php中memcache的应用
Jun 18 PHP
php中文乱码怎么办如何让浏览器自动识别utf-8
Jan 15 PHP
php获取根域名方法汇总
Oct 28 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
PHP时间和日期函数详解
May 08 PHP
PHP7匿名类用法分析
Sep 26 PHP
LAMP环境使用Composer安装Laravel的方法
Mar 25 PHP
学习thinkphp5.0验证类使用方法
Nov 16 PHP
Yii框架函数简单用法分析
Sep 09 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实现阿里大鱼短信验证的实例代码
2017/07/10 PHP
基于PHP-FPM进程池探秘
2017/10/17 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
Mootools 图片展示插件(lightbox,ImageMenu)收集集合
2010/05/21 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
Javascript 实现的数独解题算法网页实例
2013/10/15 Javascript
JS控制弹出新页面窗口位置和大小的方法
2015/03/02 Javascript
Javascript中arguments用法实例分析
2015/06/13 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
JS自定义选项卡函数及用法实例分析
2015/09/02 Javascript
js倒计时简单实现方法
2015/12/17 Javascript
bootstrap table 多选框分页保留示例代码
2017/03/08 Javascript
Require.js的基本用法详解
2017/07/03 Javascript
基于Vue实现图书管理功能
2017/10/17 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
微信小程序实现人脸检测功能
2018/05/25 Javascript
koa2实现登录注册功能的示例代码
2018/12/03 Javascript
vue图片上传本地预览组件使用详解
2019/02/20 Javascript
原生js实现五子棋游戏
2020/05/28 Javascript
Vue+ElementUI 中级联选择器Bug问题的解决
2020/07/31 Javascript
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
python使用Image处理图片常用技巧分析
2015/06/01 Python
图解Python变量与赋值
2018/04/03 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
python线程里哪种模块比较适合
2020/08/02 Python
Html5基于canvas实现电子签名并生成PDF文档
2020/12/07 HTML / CSS
捷克时尚网上商店:OTTO
2018/03/15 全球购物
玛蒂尔达简服装:Matilda Jane Clothing
2019/02/13 全球购物
Book Depository美国:全球领先的专业网上书店之一
2019/08/14 全球购物
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
2016公司中秋节寄语
2015/12/07 职场文书
MySQL快速插入一亿测试数据
2021/06/23 MySQL
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
Python获取江苏疫情实时数据及爬虫分析
2021/08/02 Python
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
聊聊配置 Nginx 访问与错误日志的问题
2022/05/25 Servers