好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

php中的类与对象(继承)详解

简介
class MyClass  
{ 
 public $dat = 0; 
 public function __construct($dat) { 
  $this->dat = $dat; 
 } 
 public function getDat() { 
  return "$this->dat\n"; 
 } 
} 
class MySubClass extends MyClass 
{ 
 public function getDat() { 
  return "dat: $this->dat\n"; 
 } 
} 
$a = new MyClass(3); 
$b = new MySubClass(4); 
echo $a->getDat();  // 3 
echo $b->getDat();  // dat: 4

方法覆盖
class MyClass  
{ 
 private $name = ""; 
 public $num = 0; 
 public $str = ""; 
 public function __construct($name) { 
  $this->name = $name; 
  $this->num = 100; 
  $this->str = "none"; 
 } 
 public function getName() { 
  return $this->name; 
 } 
} 
class MySubClass extends MyClass 
{ 
 public function __construct($name, $str) { 
  parent::__construct($name);    // 调用父类方法 
  $this->num = "0"; 
  $this->str = $str; 
  echo parent::getName()."\n";    // 调用父类方法 
 } 
 public function getName() { 
  return parent::getName()."$this->str\n"; // 调用父类方法 
 } 
} 
$b = new MySubClass("myName", true);  // myName 
echo $b->getName();          // myName1 
class MyClass  
{ 
 final public function getName() { 
 } 
}
class MyClass  
{ 
 public $a = 1; 
 protected $b = 2; 
 private $c = 3; 
 public function f1() { 
  echo "MyClass f1\n"; 
  echo "\$a:$this->a; \$b:$this->b; \$c:$this->c;\n"; 
 } 
 protected function f2() { 
  echo "MyClass f2\n"; 
  echo "\$a:$this->a; \$b:$this->b; \$c:$this->c;\n"; 
 } 
 private function f3() { 
  echo "MyClass f3\n"; 
 } 
} 
class MySubClass extends MyClass  
{ 
 public $b = 22; 
 public $c = 33; 
 public function f1() { 
  echo "MySubClass f1\n"; 
  // 继承到父类中的$a属性,直接使用 
  echo "\$a:$this->a; \$b:$this->b; \$c:$this->c;\n"; 
  // 调用父类中的同名方法 
  parent::f1(); 
  // 继承到父类中的f2()方法,直接使用 
  $this->f2(); 
 } 
 // 父类的f3()是私有的,这里的定义与父类无关 
 public function f3() { 
  echo "MySubClass f3\n"; 
 } 
} 
$b = new MySubClass; 
$b->f1();echo "\n"; 
/* 
MySubClass f1 
$a:1; $b:22; $c:33; 
MyClass f1 
$a:1; $b:22; $c:3; 
MyClass f2 
$a:1; $b:22; $c:3; 
*/ 
$b->f3();echo "\n"; 
/* 
MySubClass f3 
*/
class MyClass  
{ 
 public $a = 1; 
 protected $b = 2; 
 private $c = 3; 
 public function f1() { 
  echo "\$a:$this->a; \$b:$this->b; \$c:$this->c;\n"; 
 } 
} 
class MySubClass extends MyClass  
{ 
 public $a = 11;   // 必须为public 
 protected $b = 22; // 必须为protected或public 
 private $c = 33;   
 public function f2() { 
  echo "\$a:$this->a; \$b:$this->b; \$c:$this->c;\n"; 
 } 
} 
$b = new MySubClass; 
$b->f1(); // $a:11; $b:22; $c:3; 
$b->f2(); // $a:11; $b:22; $c:33;
class MyClass  
{ 
 const Name0 = "MyClass";  // 类常量 
 public static $id0 = 0;  // 类变量 
 public function put() {  // 将被子类覆盖的方法 
  echo "MyClass put()\n"; 
 } 
} 
class MySubClass extends MyClass  
{ 
 const Name1 = "MySubClass"; 
 public static $id1 = 1;  
 public function put() { 
  parent::put();        // 调用父类版本的对象方法 
  echo parent::Name0 . "\n";  // 父类常量 
  echo parent::$id0 . "\n";   // 父类变量 
  echo self::Name1."\n";    // 子类常量 
  echo self::$id1 . "\n";    // 子类变量 
  echo static::Name1 . "\n";  // 子类常理 
  echo static::$id1 . "\n";   // 子类变量 
 } 
} 
$a = "MyClass"; 
$ca = new MyClass; 
$cb = new MySubClass;  
$cb->put(); 
echo MyClass::Name0 . "\n"; 
echo MyClass::$id0 . "\n"; 
echo $a::Name0 . "\n"; 
echo $a::$id0 . "\n"; 
echo $ca::Name0 . "\n"; 
echo $ca::$id0 . "\n";
// 声明为final的类不能被继承 
final class MyClass 
{ 
 private $dat; 
 public function __construct($dat) { 
  $this->dat = $dat; 
 } 
 // final方法不能被覆盖,不过此类已经是final类,方法无必要在声明为final了 
 final public function getDat() { 
  return $this->dat; 
 } 
}

查看更多关于php中的类与对象(继承)详解的详细内容...

  阅读:41次