【问题标题】:Strange trait behavior in PHPPHP中的奇怪特征行为
【发布时间】:2019-11-25 18:30:12
【问题描述】:

考虑以下问题。我有 4 个文件。

sub.php

<?php

class sub extends main {
    function __construct() {
        parent::__construct();
        echo "constructor in sub<br>";
    }
}

trait.php

<?php

trait t1 {
    function tProcess() {
        echo "in tprocess in trait<br>";
    }
}

ma​​in1.php

<?php

error_reporting(E_ALL);
ini_set('display_errors', true);
require_once 'sub.php';
require_once 'trait.php';

class main {
    function __construct() {
        echo "constructor in main<br>";
    }

    function process() {
        echo "doing something in main<br>";
    }
}

$t = new sub();
$t->process();

ma​​in2.php

<?php

error_reporting(E_ALL);
ini_set('display_errors', true);
require_once 'sub.php';
require_once 'trait.php';

class main {
    use t1;
    function __construct() {
        echo "constructor in main<br>";
    }

    function process() {
        echo "doing something in main<br>";
    }
}

$t = new sub();
$t->process();

main1 按预期工作,但 main2 给了我一个致命错误:未找到 Class 'main' 错误。仅仅包含 trait 就会改变文件包含的工作方式。

【问题讨论】:

  • 什么是 t1?你是否错误地标记了你的特质?另外,你在哪里包括特质?
  • 我的错,有一些复制粘贴问题,现在都更正了
  • 我认为您只是有一次订购问题,但我不能 100% 确定。
  • 我一开始也是这么想的,但事实并非如此,因为第一个有效(当不包括特征时)。

标签: php traits


【解决方案1】:

是的,这只是一个包含订购问题。这是人们使用自动加载器的无数原因之一。

<?php

error_reporting(E_ALL);
ini_set('display_errors', true);
require_once 'trait.php';

class main {
    use t1;
    function __construct() {
        echo "constructor in main<br>";
    }

    function process() {
        echo "doing something in main<br>";
    }
}

require_once 'sub.php';
$t = new sub();
$t->process();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-22
    • 1970-01-01
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-08
    • 2013-08-09
    相关资源
    最近更新 更多