require 'autoload_generated.php';
function __autoload($className) {
global $autoload_list;
require_once $autoload_list[$className];
}
$x = new A();
?>
------------------------------------------------
3.构造函数和析构函数
PHP 构造方法 __construct() 允许在实例化一个类之前先执行构造方法。
构造方法是类中的一个特殊方法。当使用 new 操作符创建一个类的实例时,构造方法将会自动调用,其名称必须是 __construct() 。
(在一个类中只能声明一个构造方法,而是只有在每次创建对象的时候都会去调用一次构造方法,不能主动的调用这个方法,
所以通常用它执行一些有用的初始化任务。该方法无返回值。)
作用: 用来创建对象时初始化对象
子类执行分类的构造函数parent::__construct().
析构函数: __destruct ()定义:特殊的内成员函数,没有返回类型,没有参数,不能随意调用,也没有重载;
只是在类对象生命结束的时候,由系统自动调用释放在构造函数中分配的资源。
与构造方法对应的就是析构方法,析构方法允许在销毁一个类之前执行的一些操作或完成一些功能,比如说关闭文件、释放结果集等。
析构函数不能带有任何参数,其名称必须是 __destruct() 。
作用:清理了善后工作,例如,在建立对象时使用new 开辟了一个内存空间,应在退出前使用析构函数释放在构造函数中分配的资源。
例子:
class Person {
public $name;
public $age;
//定义一个构造方法初始化赋值
public function __construct($name,$age) {
$this->name=$name;
$this->age=$age;
}
public function say() {
echo "my name is :".$this->name."
";
echo "my age is :".$this->age;
}
//析构函数
function __destruct()
{
echo "goodbye :".$this->name;
}
}
$p1=new Person("ren", 25);
$p1->say();
---------------------------------------------------------------
4 .访问控制
对属性或方法的访问控制,是通过在前面添加关键字 public、protected 或 private 来实现的
public 所定义的类成员可以在任何地方被访问;
protected 所定义的类成员则可以被其所在类的子类和父类访问(当然,该成员所在的类也可以访问);
private 定义的类成员则只能被其所在类访问。
对类成员的访问控制
类成员都必须使用关键字public、protected 或 private 进行定义
对方法的访问控制
类中的方法都必须使用关键字public、protected 或 private 进行定义。如果没有设置这些关键字,则该方法会被设置成默认的 public。
例子:
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected';
private $private = 'Private';
function printHello()
{
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->public; // 这行能被正常执行
echo $obj->protected; // 这行会产生一个致命错误
echo $obj->private; // 这行也会产生一个致命错误
$obj->printHello(); // 输出 Public、Protected 和 Private
-------------------------------------------------------------
5 .对象继承
继承定义:以原有的类为基础,创建一个新类,从而代码复用的目的;
--------------------------------------
覆写是对象继承时用到的
重载是单对象中同方法名不同参数的方法
--------------------------------------
继承已为大家所熟知的一个程序设计特性,PHP 的对象模型也使用了继承。继承将会影响到类与类,对象与对象之间的关系。
比如,当扩展一个类,子类就会继承父类的所有公有和保护方法。但是子类的方法会覆盖父类的方法。
继承对于功能的设计和抽象是非常有用的,而且对于类似的对象增加新功能就无须重新再写这些公用的功能。
class Person {
public $name;
public $age;
function say() {
echo "my name is:".$this->name."
";
echo "my age is:".$this->age;
}
}
// 类的继承
class Student extends Person {
var $school; //学生所在学校的属性
function study() {
echo "my name is:".$this->name."
";
echo "my shool is:".$this->school;
}
}
$t1 = new Student();
$t1->name = "zhangsan";
$t1->school = "beijindaxue";
$t1->study();
------- --------- ------ --------- -------- -----
6 .范围解析操作符(::)
范围解析操作符(也可称作 Paamayim Nekudotayim)或者更简单地说是一对冒号,可以用于访问静态成员、方法和常量,还可以用于覆盖类中的成员和方法。
当在类的外部访问这些静态成员、方法和常量时,必须使用类的名字。
self 和 parent 这两个特殊的关键字是用于在类的内部对成员或方法进行访问的。
注意:
当一个子类覆盖其父类中的方法时,PHP 不会再执行父类中已被覆盖的方法,直到子类中调用这些方法为止
例子:
class OtherClass extends MyClass
{
public static $my_static = 'static var';
public static function doubleColon() {
echo parent::CONST_VALUE . "\n";
echo self::$my_static . "\n";
}
}
OtherClass::doubleColon();
?>
http://www.bkjia.com/PHPjc/934463.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/934463.htmlTechArticlePHP 类与对象 全解析( 一) 1.类与对象 对象:实际存在该类事物中每个实物的个体。$a =new User(); 实例化后的$a 引用:php的别名,两个不同的...