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中取得image按钮传递的name值
Oct 09 PHP
利用php来自动调用不同服务器上的flash
Oct 09 PHP
PHP中Session的概念
Oct 09 PHP
如何从一个php文件向另一个地址post数据,不用表单和隐藏的变量的
Mar 06 PHP
PHP下一个非常全面获取图象信息的函数
Nov 20 PHP
thinkphp3.0 模板中函数的使用
Nov 13 PHP
php获取客户端电脑屏幕参数的方法
Jan 09 PHP
yii2学习教程之5种内置行为类详解
Aug 03 PHP
tp5(thinkPHP5)框架实现多数据库查询的方法
Jan 10 PHP
Laravel5.1 框架表单验证操作实例详解
Jan 07 PHP
tp5.1 框架查询表达式用法详解
May 25 PHP
PHP连接MySQL数据库三种实现方法
Dec 10 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
Get或Post提交值的非法数据处理
2006/10/09 PHP
PHPThumb PHP 图片缩略图库
2012/03/11 PHP
PHP连接SQLServer2005的实现方法(附ntwdblib.dll下载)
2012/07/02 PHP
php实现用于验证所有类型的信用卡类
2015/03/24 PHP
php实现用户登陆简单实例
2017/04/04 PHP
用于table内容排序
2006/07/21 Javascript
TreeView 用法(有代码)(asp.net)
2011/07/15 Javascript
JQUERY实现左侧TIPS滑进滑出效果示例
2013/06/27 Javascript
利用JS实现浏览器的title闪烁
2013/07/08 Javascript
使用JavaScript 实现的人脸检测
2015/03/24 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
使用javascript插入样式
2016/03/14 Javascript
微信小程序 购物车简单实例
2016/10/24 Javascript
JS实现iframe自适应高度的方法示例
2017/01/07 Javascript
详解支持Angular 2的表格控件
2017/01/19 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
[02:01]2018完美盛典-开场舞《双子星》
2018/12/16 DOTA
Python中几种操作字符串的方法的介绍
2015/04/09 Python
基于python的Tkinter实现一个简易计算器
2015/12/31 Python
Python内建数据结构详解
2016/02/03 Python
分析Python中设计模式之Decorator装饰器模式的要点
2016/03/02 Python
python 出现SyntaxError: non-keyword arg after keyword arg错误解决办法
2017/02/14 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
AmazeUI 评论列表的实现示例
2020/08/13 HTML / CSS
旅游管理实习自我鉴定
2013/09/29 职场文书
银行见习期自我鉴定
2014/01/29 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
幼儿园课题实施方案
2014/05/14 职场文书
2014年最新个人对照检查材料范文
2014/09/25 职场文书
如何写通讯稿
2015/07/22 职场文书
vue实现无缝轮播效果(跑马灯)
2021/05/14 Vue.js
浅谈Python numpy创建空数组的问题
2021/05/25 Python
Python语言内置数据类型
2022/02/24 Python
MySQL创建表操作命令分享
2022/03/25 MySQL
springcloud整合seata
2022/05/20 Java/Android