【问题标题】:How to use a PHP class from another file?如何使用另一个文件中的 PHP 类?
【发布时间】:2012-12-30 07:45:03
【问题描述】:

假设我有两个文件 class.phppage.php

class.php

<?php 
    class IUarts {
        function __construct() {
            $this->data = get_data('mydata');
        }
    }
?>

这是一个非常初级的例子,但假设我想使用:

$vars = new IUarts(); 
print($vars->data);

在我的 page.php 文件中;我该怎么做呢?如果我这样做include(LIB.'/class.php');,它会对我大喊大叫并给我Fatal error: Cannot redeclare class IUarts in /dir/class.php on line 4

【问题讨论】:

    标签: php


    【解决方案1】:

    您可以使用include/include_oncerequire/require_once

    require_once('class.php');
    

    或者,使用autoloading 通过添加到page.php

    <?php 
    function my_autoloader($class) {
        include 'classes/' . $class . '.class.php';
    }
    
    spl_autoload_register('my_autoloader');
    
    $vars = new IUarts(); 
    print($vars->data);    
    ?>
    

    它还可以将 __autoload 函数添加到您包含在每个文件中的库中,例如 utils.php

    还有这篇文章有一个很好的不同的方法。

    Efficient PHP auto-loading and naming strategies

    【讨论】:

    • "__autoload() 已弃用,请改用 spl_autoload_register()" 由于此结果在 google 上相当高,也许有人应该对其进行编辑并更清楚地指出这一点?
    • 这个接受的答案对于问题和显示的错误消息并不直截了当(由于多次包含同一类)。不要投反对票,因为它仍然有用且正确。
    【解决方案2】:

    在这种情况下,您似乎已经在某处包含了该文件。但是对于类文件,您应该使用require_once 真正“包含”它们以避免这种事情;如果文件已经包含,它将不包含该文件。 (而且你通常应该使用require[_once],而不是include[_once],区别在于如果文件不存在,require 将导致致命错误,而不是仅仅发出警告。)

    【讨论】:

      【解决方案3】:

      请改用include_once
      这个错误意味着你已经包含了这个文件。

      include_once(LIB.'/class.php');

      【讨论】:

        【解决方案4】:

        使用include("class.classname.php");

        并且类应该使用&lt;?php //code ?&gt; not &lt;? //code ?&gt;

        【讨论】:

        • 您所说的第二件事并非针对此问题或不正确。 &lt;? ?&gt; 只是较新的语法,我相信它可以在php.ini 中启用或禁用。 (抱歉复活这个)
        • 我认为他的意思是所有服务器上并不总是启用速记版本,有时您可能正在使用无法修改 php.ini 的虚拟主机环境,所以它更安全,更如果您使用
        【解决方案5】:

        使用

        require_once(__DIR__.'/_path/_of/_filename.php');
        

        这也有助于从不同的文件夹导入文件。 尝试extends方法继承该文件中的类并重用函数

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-11-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-19
          • 2016-04-17
          • 2017-12-09
          • 2014-04-08
          相关资源
          最近更新 更多