2016-08-16 36 views
2

我对PHP很陌生。我理解OOP的概念,但在语法上,我不知道如何从另一个文件扩展父类。这里是我的代码:PHP:从另一个文件调用父类

parent.php

<?php 
namespace Animals; 

class Animal{ 
    protected $name; 
    protected $sound; 
    public static $number_of_animals = 0; 
    protected $id; 

    public $favorite_food; 

    function getName(){ 
     return $this->name; 
    } 

    function __construct(){ 
     $this->id = rand(100, 1000000); 
     Animal::$number_of_animals ++; 

    } 

    public function __destruct(){ 

    } 

    function __get($name){ 
     return $this->$name; 
    } 

    function __set($name, $value){ 
     switch($name){ 
      case 'name'  : 
       $this->$name = $value; 
       break; 
      case 'sound' : 
       $this->$name = $value; 
       break; 
      case 'id'  : 
       $this->$name = $value; 
       break; 
      default   : 
       echo $name . " not found"; 
     } 
    } 

    function run(){ 
     echo $this->name . ' runs <br />'; 
    } 

} 
?> 

扩展classes.php

<?php 
namespace mammals; 
include 'parent.php'; 

use Animals\Animal as Animal; 

class Cheetah extends Animal{ 
    function __construct(){ 
     parent:: __construct(); 
    } 
} 



?> 

main.php

<?php 
include 'extended-classes.php'; 
include 'parent.php'; 

use Animals\Animal as Animal; 
use mammals\Cheetah as Cheetah; 

$cheetah_one = new Cheetah(); 

$cheetah_one->name = 'Blur'; 

echo "Hello! My name is " . $cheetah_one->getName(); 

?> 

我使用MAMP运行代码,并且出现以下错误:Cannot declare class Animals\Animal, because the name is already in use in /path/to/file/parent.php on line 4。所有提示都表示赞赏。

+0

你应该使用'include_once的()',而不是仅仅'包括()',以确保您的文件只包含一次。 –

回答

3

Main.php不需要包含parent.php,因为extended-classes.php已经包含了它。或者,您可以使用include_oncerequire_once而不是include

+0

This Works!感谢您的帮助。 – user5854440

0

对于包括类和常量,它更好地使用

include_once or require_once 

没有更多的错误上再宣布班会抛出。

0

对我来说,它的工作使用。

require_once 'extended-classes.php'; 
require_once 'parent.php'; 

这是由于连连包括文件