php 类里不运行构造函数,PHP - 类不调用扩展类的构造函数,而它在其他类中工作正常...

我的问题:

所以,我有一个名为'Home'的类,它扩展了类'Controller',控制器类需要构造函数中的所有模型 . 这很好用 .

现在我有一个名为'Login'的第二个类它还扩展了'Controller'类,但它没有调用构造函数,我很困惑为什么它不调用这个类中的构造函数 .

我找到了一个解决方法,那就是使用 Parent::__construct() 在Login类中构建一个构造函数,当我这样做时,一切正常 .

但我正在努力为什么它在Home类中工作,而不是在Login类中工作 .

一些信息:

The home controller: (没有任何问题的那个)

当我不强制调用扩展类的构造函数时回溯:

0 Core \ Controller - > __ construct()在[/var/www/html/site.luukwuijster.eu/core/Router.php:26]调用#1 App - > __ construct()调用[/ var / www / HTML / site.luukwuijster.eu /公/ index.php文件:5]

当我强制调用扩展类的构造函数时回溯:

0 Core \ Controller - > __ construct()在[/var/www/html/site.luukwuijster.eu/app/controllers/home.php:12]调用#1 Home - > __ construct()调用[/ var / www / html / site.luukwuijster.eu / core / Router.php:26]#2 App - > __ construct()在[/var/www/html/site.luukwuijster.eu/public/index.php:5]中调用

The Login controller: (有问题的那个)

当我不强制调用扩展类的构造函数时:

致命错误:未捕获错误:在/var/www/html/site.luukwuijster.eu/app/controllers/login.php:21中找不到类'App \ User':堆栈跟踪:#0 / var / www / html / site.luukwuijster.eu/core/Router.php(26):登录 - >登录()#1 /var/www/html/site.luukwuijster.eu/public/index.php(5):App - > __ construct( )第21行/var/www/html/site.luukwuijster.eu/app/controllers/login.php中的#2

当我强制调用扩展类的构造函数时回溯:

核心\控制器 - > __ construct()调用[/var/www/html/site.luukwuijster.eu/app/controllers/login.php:11]#1登录 - > __ construct()调用[/ var / www /html/site.luukwuijster.eu/core/Router.php:26]#2 App - > __ construct()在[/var/www/html/site.luukwuijster.eu/public/index.php:5]中调用

正如你所看到的,当我强制调用构造函数时,它工作正常,但是当我不强制它时,它只适用于Home类 . (家庭控制器)

代码:

Home controller:

use App\User;

use Core\Controller;

use Core\DB;

class Home extends Controller

{

public function test()

{

return User::name();

}

}

Login Controller:

use App\User;

use Core\Controller;

use Core\DB;

class Login extends Controller

{

//This is the constructor I was talking about to force the calling of

//the constructor in the extended class.

public function __construct()

{

parent::__construct();

}

public function login()

{

return User::name();

}

}

Extended class (控制器)

namespace Core;

class Controller

{

public $database;

function __construct()

{

//I have put this here to see the backtrace.

debug_print_backtrace();

$this->database = new DB();

foreach (glob('../app/models/*.php') as $model){

require_once $model;

}

}

Router.php 我把它放在这里,因为当我不强制在扩展类上调用构造函数时,它会在这里的规则26中调用 . ( $this->controller = new $this->controller; )

class App

{

protected $controller = 'home';

protected $method = 'index';

protected $parameters = [];

protected $a = 0;

public function __construct()

{

$url = $this->Url();

if(file_exists('../app/controllers/'. $url[0] .'.php')){

$this->controller = $url[0];

unset($url[0]);

} else {

if (isset($url[0]))

die(view('error404'));

}

require_once '../app/controllers/'. $this->controller .'.php';

$this->controller = new $this->controller;

if (isset($url[1])){

if (method_exists($this->controller, $url[1])){

$this->method = $url[1];

unset($url[1]);

}else{

die(view('error404'));

}

}

$this->parameters = $url ? array_values($url) : [''];

echo call_user_func_array([$this->controller, $this->method], $this->parameters);

}

public function Url()

{

if(isset($_GET['url'])){

$url = filter_var(rtrim($_GET['url'], '/'), FILTER_SANITIZE_URL);

$exploded_url = explode('/', $url);

return $exploded_url;

}

}

}

我的问题:

为什么它在Home控制器中工作正常,而不是在Login Controller中?

我需要做些什么才能使其在登录控制器中以相同的方式工作?

我希望一切都清楚,如果你需要更多的代码或信息,你可以在评论中问我 .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值