【问题标题】:PHP Calling To Object From Another ObjectPHP从另一个对象调用对象
【发布时间】:2014-10-08 04:15:51
【问题描述】:

我一直主要使用 JAVA 进行编程,并用 PHP 编写过程序,但现在我尝试用 PHP 编写一些基于 OOP 的程序,但遇到了一个问题。 我有两个文件,Zoo.phpDog.php,每个文件都包含一个类。

Dog.php:

<?php
class Dog {
     private $name;
     private $color;

     public function __construct($name,$color) {
         $this->name = $name;
         $this->color = $color;
     }

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

     public function getColor(){
         return $this->color;
     }
}

还有Zoo.php

<?php

class Zoo {
    private $name;
    private $dogs;

    public function __construct($name) {
        $this->name = $name;
        $dogs = array();
    }

    public function addDog($dogName,$dogColor){
        $dog = new Dog($dogName,$dogColor);
        array_push($this->dogs,$dog);
    }

    public function getAllDogs(){
        var_dump($dogs);
    }
}

echo "start";
$z = new Zoo("test_zoo");
$z->addDog("blackie","black");
$z->getAllDogs();

上面的代码输出:

Fatal error: Class 'Dog' not found in C:\wamp\www\Zoo.php on line 13

我想知道上面的代码有什么问题,以及如何在 PHP 中创建另一个对象中的对象实例。提前致谢。

【问题讨论】:

标签: php oop


【解决方案1】:

我猜你不包括 Dog 类。

<?php
include "Dog.php";

class Zoo {
/* ... */
}

或者您可以使用autoloading 默认自动包含任何类。

【讨论】:

    【解决方案2】:

    这与 OOP 无关。只是您忘记包含 Dog 文件以在 Zoo 类中使用它:

    <?php
    
    include 'Dog.php'; // or whatever path   
    
    class Zoo { ...
    

    其他一切都应该没问题,顺便说一句,似乎是 PHP OOP 的一个很好的用途。 :)

    【讨论】:

      【解决方案3】:

      您尚未将您的Dog.php 包含在您的Zoo.php 中。因此,您无法创建新实例。

      在 Zoo 类的上方添加这个:

      include("Dog.php");
      class Zoo {
      

      【讨论】:

        【解决方案4】:

        所有你需要返回函数。 这里有三个错误,你会在我的代码中看到所有这些错误。构造函数没有返回,表现得像 void ,所以我们需要一个返回狗规范的方法。如果你想使用单独文件中的类,所以你必须使用 "include" 或 "require" 或 "require_once" 等 php 方法(看看这个方法的区别)

        <?php 
        
        class Dog {
            private $name;
            private $color;
        
            public function __construct($name,$color) {
                $this->name = $name;
                $this->color = $color;
            }
        
            public function getName(){
                return $this->name;
            }
        
            public function getColor(){
                return $this->color;
            }
            public function getDogs(){
                return array("name"=>$this->name,"color"=>$this->color);
        
            }
        }
        
        
        class Zoo extends Dog{
            private $name;
            private $dogs=array();
        
            public function __construct($name) {
                $this->name = $name;
                $dogs = array();
            }
        
            public function addDog($dogName,$dogColor){
                $dog = new Dog($dogName,$dogColor);
                array_push($this->dogs,$dog->getDogs());
            }
        
            public function getAllDogs(){
                var_dump($this->dogs);
            }
        }
        
        echo "start";
        $z = new Zoo("test_zoo");
        $z->addDog("blackie","black");
        
        $z->getAllDogs();
        ?>
        

        【讨论】:

          猜你喜欢
          • 2013-05-23
          • 1970-01-01
          • 2016-06-10
          • 2013-02-18
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-12-09
          • 1970-01-01
          相关资源
          最近更新 更多