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中用header图片地址 简单隐藏图片源地址
Apr 09 PHP
php下关于中英数字混排的字符串分割问题
Apr 06 PHP
php 连接mysql连接被重置的解决方法
Feb 15 PHP
PHP生成验证码时“图像因其本身有错无法显示”的解决方法
Aug 07 PHP
php删除数组元素示例分享
Feb 17 PHP
ThinkPHP Mobile使用方法简明教程
Jun 18 PHP
laravel安装和配置教程
Oct 29 PHP
php禁止直接从浏览器输入地址访问.php文件的方法
Nov 04 PHP
php中JSON的使用与转换
Jan 14 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
Yii2下session跨域名共存的解决方案
Feb 04 PHP
PHP赋值的内部是如何跑的详解
Jan 13 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 用数组降低程序的时间复杂度
2009/12/04 PHP
PHP PDO函数库详解
2010/04/27 PHP
php源码分析之DZX1.5字符串截断函数cutstr用法
2015/06/17 PHP
php简单实现sql防注入的方法
2016/04/22 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
PHP聚合式迭代器接口IteratorAggregate用法分析
2017/12/28 PHP
Smarty模板类内部原理实例分析
2019/07/03 PHP
jquery 添加节点的几种方法介绍
2013/09/04 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
JS从一组数据中找到指定的单条数据的方法
2016/06/02 Javascript
使用jQuery Rotare实现微信大转盘抽奖功能
2016/06/20 Javascript
深入学习js瀑布流布局
2016/10/14 Javascript
ionic实现底部分享功能
2017/05/11 Javascript
vue cli3 调用百度翻译API翻译页面的实现示例
2019/09/13 Javascript
vue实现修改图片后实时更新
2019/11/14 Javascript
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
JavaScript实现猜数字游戏
2020/05/20 Javascript
python动态加载变量示例分享
2014/02/17 Python
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
Python Web框架Flask中使用七牛云存储实例
2015/02/08 Python
Python中字符串的处理技巧分享
2016/09/17 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
python按照多个条件排序的方法
2019/02/08 Python
python word转pdf代码实例
2019/08/16 Python
详解python中index()、find()方法
2019/08/29 Python
Tensorflow读取并输出已保存模型的权重数值方式
2020/01/04 Python
python 函数中的参数类型
2020/02/11 Python
英国航空官网:British Airways
2016/09/11 全球购物
工程师岗位职责
2013/11/08 职场文书
毕业生怎样写好自荐信
2013/11/11 职场文书
小学生期末自我鉴定
2014/01/19 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
弄虚作假心得体会
2014/09/10 职场文书
2014年导购员工作总结
2014/11/18 职场文书
2016大学生诚信考试承诺书
2016/03/25 职场文书
Python下opencv使用hough变换检测直线与圆
2021/06/18 Python