php基础知识:类与对象(1)

  作者:bea

类的定义: 以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。伪变量$this可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。//??静态调用的内部到底是怎样的?看个例子:class A{ function foo() { if (isset($this)) { echo '$this
类的定义:   以关键字 class 开头,后面跟着类名,可以是任何非 PHP 保留字的名字。后面跟着一对花括号,里面包含有类成员和方法的定义。伪变量$this可以在当一个方法在对象内部调用时使用。$this 是一个到调用对象(通常是方法所属于的对象,但也可以是另一个对象,如果该方法是从第二个对象内静态调用的话)的引用。//??静态调用的内部到底是怎样的?看个例子:class A{   function foo()   {       if (isset($this)) {           echo '$this is defined (';           echo get_class($this);           echo ")
";       } else {           echo "$this is not defined.
";       }   }}class B{   function bar()   {       A::foo();   }}$a = new A();$a->foo();A::foo();$b = new B();$b->bar();B::bar();输出结果为:$this is defined (a)$this is not defined.$this is defined (b)$this is not defined./*我希望知道这个例子的内存等的具体实现,我暂时无法理解。如果有人可以讲清楚,可以告诉我。我们宿舍牛头现在正在冬眠,等他醒来,我会问。*/new要创建一个对象的实例,必须创建一个新对象并将其赋给一个变量。当创建新对象时该对象总是被赋值,除非该对象定义了构造函数并且在出错时抛出了一个异常。当把一个对象已经创建的实例赋给一个新变量时,新变量会访问同一个实例,就和用该对象赋值一样。此行为和给函数传递入实例时一样。可以用克隆给一个已创建的对象建立一个新实例。(这几句话虽然很短,但是未必容易理解。)例子如下:class SimpleClass{   // 成员声明   public $var = 'a default value';
   // 方法声明   public function displayVar() {       echo $this->var;   }}//看下面的图.1>new 在heap(堆)中实例化一个对象。2>将指针$instance指向他$instance = new SimpleClass();//3>将指针$assigned指向heap中的实例化对象$assigned   =  $instance;//4>将$instance的引用(地址)赋值给$reference$reference  =& $instance;$instance->var = '$assigned will have this value';$instance = null; // 5>间断$instance与heap中实例的连接。var_dump($instance);var_dump($reference);var_dump($assigned);输出:NULLNULLobject(SimpleClass)#1 (1) {  ["var"]=>    string(30) "$assigned will have this value"}图示整个过程:类继承extends一个类可以在声明中用 extends 关键字继承另一个类的方法和成员。不能扩展多个类,只能继承一个基类。
被继承的方法和成员可以通过用同样的名字重新声明被覆盖,除非父类定义方法时使用了 final 关键字。可以通过 parent:: 来访问被覆盖的方法或成员。(继承的机制到底怎样的?) 源代码如下:class ExtendClass extends SimpleClass{   // Redefine the parent method   function displayVar()   {       echo "Extending class
";       parent::displayVar();   }}$extended = new ExtendClass();$extended->displayVar();输出:Extending classa default value


有用  |  无用

猜你喜欢