【问题标题】:Connection timed out On Class Extend连接超时在类扩展
【发布时间】:2015-11-04 00:16:44
【问题描述】:

我对 PHP 很陌生,所以我确定我做错了什么,但我的代码非常简单,我似乎看不出是什么导致了超时错误。

index.php

include_once ("./inc/controller/controller.php");
$controller = new controller();
$controller->index();

controller.php

include_once('./inc/class/class.common.php');

    class controller {
        public function __construct(){
            $this->common = new Common; // This Line Causes the Error
            echo "Everything Loaded"; // This only executes when above line is gone
        }
        public function index(){
            die("done");    
        }
    }

class.common.php

class Common extends controller{
   // I don't even have code in here yet
}

查看我的日志我看到了错误

Class 'controller' not found in /inc/class/class.common.php 

为什么找不到控制器。

【问题讨论】:

    标签: php model-view-controller controller


    【解决方案1】:

    当你扩展一个类而不定义构造函数时,它将从父类继承。因此,当您在控制器内部创建 Common 的实例时,它本身会尝试创建 Common 的实例。然后那个实例也会尝试创建一个,以此类推,无限循环。

    您可以简单地覆盖 Common 中的构造函数。一个空的就可以了:

    class Common extends controller{
       public function __construct() {
       }
    }
    

    但是想要一个你已经在扩展的对象的单独实例是很奇怪的。

    【讨论】:

    • 非常感谢您的回答。你能解释一下这句话吗?“但是想要一个你已经在扩展的对象的单独实例很奇怪。”谢谢。
    • 扩展一个类的要点是你的新类将继承它的所有函数和变量,并且通常建立在它们之上。通过扩展一个类,您实际上已经创建了它的一个实例,因此通常不需要再次复制所有内容。
    • 所以你是说如果我只是想拥有获取 IP 地址等通用功能。我应该只拥有一个通用类而不是一个类的扩展?
    • 是的。虽然对于那个特定的例子,我也会使用静态方法。然后,您无需在各处实例化对象即可使用这些功能。请参阅此处了解更多信息php.net/manual/en/language.oop5.static.php
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多