1.PHP自定义类 类中的成员属性如果没有特殊关键字修饰 就必须加上var关键字,而在其他地方不需要这样做
2.PHP类中的构造方法无法进行重载
构造方法不要设置成私有的权限
也就是说在php类中只能声明一个构造方法,不过可以通过默认参数,使php类中的构造方法实现与其他面向对象语言的构造方法重载功能
3.php类中的析构方法不能有任何参数,通常在对象的引用被赋予其他值或者页面运行结束后,对象会失去引用,在php 中有一个垃圾回收机制,当对象不能访问时就会自动启动垃圾回收的程序,收回对象在堆内存中占用的内存空间,析构方法正是在此之前自动调用的。
4.php类封装的含义
一是把类中的所有属性和方法结合在一起,形成一个不可分割的独立的单位
二是信息隐蔽,即尽可能隐蔽类中的内部细节,对外界形成一道屏障,只保留有限的对外接口使之与外部发生联系
5.PHP中的魔术函数
__construct (), __destruct,__set,__get,__isset,__unset
其中__construct ()不要设置成私有的权限,以至于在创建对象时,无法进行对成员属性的初始化工作
其他的几个如__set,__get,__isset,__unset等为了防止用户直接调用,可以将此函数设置为私有权限
6.PHP类的继承性
PHP与java只能类的单继承模式
作用:加强代码的可重用性与应用程序的可扩展性与维护性
7.PHP的访问修饰符
private | protected | public(默认) | |
同一个类中 | 1 | 1 | 1 |
类的子类中 | 1 | 1 | |
所有的外部成员 | 1 |
8.PHP 子类重载父类的方法
在php中不能定义重名的函数,也不能在同一个类中定义重名的方法,所以也就没有方法重载
但在子类中可以定义和父类重名的方法,因为父类的方法已经在子类中存在,这样在子类中就可以把从父类中继承过来的方法重写。
php语言 在子类重载的方法中调用父类被覆盖方法的功能,使用关键字parent::父类方法名(),然后添加自己的一些代码
9.PHP中常见的关键字
php5提供了一些常见关键字,用来修饰类,成员属性,或成员方法,他们具有特定的功能,例如final,static,const等
9.1 final它可以加在类或类中方法前,但不能使用final标识成员属性,即使final有常量的意思,但在php中定义常量是使用define()函数来完成,在类中将成员属性声明为常量也有专门的方式。
那么他的作用如下
1)使用final标识的类,不能被继承。
2) 在类中使用final标识的成员方法,在子类中不能被覆盖
9.2 static关键字
static可以标识成员属性和成员方法,利用static标识的成员是属于类的,即在多个对象之间是共享的
在类成员方法中可以用self::XX或者self::XX()访问
在类体外可以使用 类名::XX或者类名::XX()访问,但是也可以通过对象名访问静态方法,但是不能通过对象名访问静态属性
注意 :静态方法只能访问静态属性,但是非静态方法可以通过self::XX或者类名::XX访问静态属性或者静态方法
<?php
class A{
static $count;
function __construct(){
self::$count++;
}
static function __getC(){
return self::$count;
}
}
A::$count=0;
$a=new A();
$b=new A();
$c=new A();
echo A::$count;
echo "<br>";
echo $c->__getC();
?>
9.3 const
const在类中声明常量,其访问方式和静态成员差不多,但是在类外部不能通过对象名访问类常量
10.php类中常用的魔术方法
10.1 __toString
__toString 方法在直接输出对象引用时自动调用
<?php
class TestClass{
private $a;
function __construct($str){
$this->a=$str;
}
function __toString(){
return "xuehao ";
}
}
$o=new TestClass("hello");
echo $o;
?>
10.2 __call()
在调用对象中不存在的方法时,就会出现系统报错,然后程序退出不能继续执行,在类中添加一个魔术方法"__call",则调用对象中不存在的方法时就会自动调用该方法。
<?php
class A{
function hello(){
echo "hello";
}
function __call($functionName,$args){
echo "你所调用的函数".$functionName."不存在";
echo "参数:";
print_r($args);
echo "不存在";
}
}
$a=new A();
$a->my('world','hello');//调用对象中不存在的方法
echo "<br>"."ok";//因为_call函数的存在,这语句句会正常执行,若不存在_call,则会报错,退出程序
?>
__call函数的有两个参数,第一个是不存在方法的方法名,第二个是这个不存在方法调用时参数列表所形成的数组
10.3 __autoload()
当创建一个类的实例化对象时,却在本页面找不到此类,调用此方法,可以进行文件包含
<?php
function __autoload($classname){
include("class.".$classname.".php");
}
$a = new A();//本页面找不到A类,所以会自动调用__autoload()方法,将类文件包含进来,如果需要包含多各类文件,用此方法可以节省编程时间
?>
类文件class.A.php
<?php
class A{
function hello(){
echo "hello";
}
function __call($functionName,$args){
echo "你所调用的函数".$functionName."不存在";
echo "参数:";
print_r($args);
echo "不存在";
}
}
$a=new A();
$a->my('world','hello');
echo "<br>OK";
?>