类的概念:类是具有相同属性和操作的一组对象的集合。它为属于该类的所有对象提供了统一的抽象描述,其内部包括属性和操作两个主要部分。在面向对象的编程语言中,类是一个独立的程序单位,它应该有一个类名并包括属性说明和操作说明两个主要部分。
i. 类的关键字定义使用class
Class Person{}; 2.定义一个有成员属性和操作的类 Class Person{ 成员属性........ 操 作........ } 3.定义一个不能被继承的类,使用final关键字 Final class Person{ 成员属性........ 操 作........ } 4.注意:final关键字不能用来修饰成员属性 ,只能修饰类和方法(final方法后面介绍) 5.这里举一个带有final的class 定义一个final的类FinalClass,包含一个公共函数 final class FinalClass { public function ffun() { echo “本类为final类”; } } 定义一个类ChildFinalClass 并继承FinalClass 类 class ChildFinalClass extends FinalClass { public function fchildfun() { echo ‘本类继承final类FinalClass ’;
} 这样当执行以上命令的时候系统会提示
2、类中成员属性的定义 i. 成员属性就是对该类定义的一些变量属性,那人作为一个类来说,人都有一对眼睛(正常的啊,二郎神除外),一张嘴,两个耳朵,等这样的一些固定的用来描述或表现某种事物的专有名词称为成员属性 ii. 类中成员属性的声明使用的关键字
iii. 常见成员属性声明是由关以下键字 Public: 表示全局的,类内部外部子类都可以访问 Var: php 5 版本中会认为这个成员属性为public类型的属性 protected 表示受保护的,只有本类或子类或父类中可以访问
Static: 1)静态的属性, 2)用static修饰的成员属性可以被同一个类的所有对象共享 3) 静态的数据是在类第一次被加载的时候就存在了内存中的数据段中(初始化静态段) 4)类中使用self::成员属性名 5)类外 类名::成员属性名 Const: 1)类中常量属性,在类中声明常量必须使用const 2)类中使用 self::成员属性名 3)类外使用 类名::成员属性名
iv. 成员属性的调用方式: 在类的成员方法里面,可以通过 $this->property(property是属性名字)这种方式来访问类的属性、 方法,但是要访问类的静态属性或者在静态方法里面却不能使用,而是使用 self::$property。 在类的非静态方法里面可以使用伪变量 $this,这个伪变量是调用该方法的实例化对象引用。
class FinalClass {
//由于age是私有的成员属性,所以在这里将不会被调用,将提示没有定义此属性在ChildFinalClass类中。
}
3、类中操作的定义 i. 我本人一般喜欢叫操作为成员方法,以下我会叫操作为方法其实都是一样的 ii. 成员方法的定义:成员方法就是对该类定义的一些函数方法,比如拿这个类来例句例子,人能吃饭,能跑步,能敲代码,这就是成员方法。也就是可以做一些可执行性的动作我们理解为成员方法 iii. 成员方法的访问和成员属性一样可以参照上面成员属性的访问介绍。 iv. 成员方法和成员属性一样也包括public,protected,private,static,final并且作用域也是一样的,接下来举一些例子供大家参考和理解。 v. 静态的成员方法只能访问静态的成员属性和成员方法,并且类内部访问静态方法可以使用self::静态方法(), 类外部访问使用类名::静态方法()
class FinalClass { static $a = '$a'; const A = 'A'; public $name = '凤姐'; protected $sex = '男+女'; private $age = 23;
//定义一个公共方法 public function publickfun(){
}
//定义一个受保护的方法
private function privatefun(){ echo 'FinalClass类中self::$a->'.self::$a."<hr>"; echo "FinalClass类中self::A->".self::A."<hr>"; echo '大家好,我叫:'.$this->name."<hr>"; echo '我是:'.$this->sex.'生<hr>'; echo '我今年:'.$this->age.'<hr>';
}
public function fchildfun(){ echo 'ChildFinalClass类中ChildFinalClass::$a->'.ChildFinalClass::$a."<hr>";
Echo 'ChildFinalClass类中ChildFinalClass::A->'.ChildFinalClass::A."<hr>";
echo '我是:'.$this->sex.'生<hr>';
echo '我今年:'.$this->age.'<hr>'; //由于age是私有的成员属性,可以理解为我不想让别人知道我的年龄,所以在这里将不会被调用,将提示没有定义此属性在ChildFinalClass类中。
$this->publickfun();
$this->protectedfun();
$this->privatefun(); //由于privatefun是私有的成员方法,所以在这里将不会被调用。
}
i. 魔术方法必须被定义为公共的,所有其他魔术方法都必须如此 ii. 从PHP 5以后的版本,PHP中的类就可以使用魔术方法了。其规定以两个下划线(__)开头的方法都保留为魔术方法,所以建议大家函数名最好不用__开头,除非是为了重载已有的魔术方法,接下来列出一些魔术方法,如果大家想详细了解可以针对某一个进行查询了解,这里就不大篇幅的介绍了。 1、__construct() 构造方法
析构方法 2、__clone() 如果想复制一个对象则需要使用clone方法 3、__toString() 方法在将一个对象转化成字符串时自动调用,比如使用echo打印对象时 4、__sleep() 串行化的时候用
5、 __set_state() 当调用var_export()时,这个静态 方法会被调用(自PHP 5.1.0起有效)
6、__invoke(PHP 5.3.0以上版本有效) 7、__callStatic(PHP 5.3.0以上版本有效) 是为了处理静态方法调用 8、__get() 当调用一个未定义的属性时,此方法会被触发,传递的参数是被访问的属性名。
9、__isset() 当在一个未定义的属性上调用isset()函数时调用此方法
10、__call( $method, $arg_array ) 这里的未定义的方法包括没有权限访问的方法;如果方法不存在就去父类中找这个方法,如果父类中也不存在就去调用本类的__call()方法,如果本类中不存在__call()方法就去找父类中的__call()方法。 11、__autoload() 自动加载魔术方法 |