Допустим, у меня есть два файла class.php и page.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
Вы можете использовать include
/ include_once
или require
/ require_once
require_once('class.php');
В качестве альтернативы, используйте автозагрузку , добавив в page.php
<?php function __autoload($class_name) { require_once $class_name . '.php'; } $vars = new IUarts(); print($vars->data); ?>
Он также работает над добавлением функции __autoload
в lib, которую вы включаете в каждый файл, например utils.php
.
Существует также этот пост, который имеет хороший и отличный подход.
Эффективная стратегия автоматической загрузки и именования PHP
В этом случае, похоже, вы уже включили файл где-нибудь. Но для файлов классов вы должны «включить» их, используя require_once
чтобы избежать такого рода вещей; он не будет включать файл, если он уже был. (И вы обычно должны использовать require[_once]
, а не include[_once]
, разница, которая require
, приведет к фатальной ошибке, если файл не существует, вместо того, чтобы просто выдавать предупреждение.)
Вместо этого используйте include_once
.
Эта ошибка означает, что вы уже включили этот файл.
include_once(LIB.'/class.php');
Использовать include("class.classname.php");
И класс должен использовать <?php //code ?> not <? //code ?>
<?php //code ?> not <? //code ?>