Ответ 1
Создайте экземпляр вашего класса после определения класса и интерфейса, а не раньше.
Порядок определения в этом случае должен быть:
- Интерфейс
- Класс
- Экземпляр класса (объектов)
Привет, у меня очень простой класс, который реализует интерфейс. И класс, и интерфейс находятся в одном файле.
Когда я реализую интерфейс, я получаю фатальную ошибку "Класс не найден", но когда я удаляю инструменты, а затем пытаюсь использовать класс, я могу использовать его в порядке.
Может кто-нибудь предложить какие-либо советы по этому поводу?
Извините, вот какой-то код, который я использую для тестирования на данный момент:
$tester = new TypeOneTester();
$tester->test("Hello");
interface iTestInterface
{
public function test($data);
}
class TypeOneTester implements iTestInterface
{
public function test($data)
{
return $data;
}
}
Создайте экземпляр вашего класса после определения класса и интерфейса, а не раньше.
Порядок определения в этом случае должен быть:
Это (очень плохое) документированное ограничение:
http://php.net/manual/pl/migration5.incompatible.php
В некоторых случаях классы должны быть объявлены перед использованием. Это происходит только в том случае, если используются некоторые новые функции PHP 5 (такие как интерфейсы). В противном случае поведение будет старым.
Тем не менее я подал сообщение об ошибке. IMO он должен быть исправлен, поскольку это противоречивое поведение, и сообщение об ошибке не полезно для всех, кто предполагает, что я сделал это, PHP просто не интересовался, где вы объявляете функции/классы. Давай, он там уже более 10 лет...
пахнет как ошибка в php. Удостоверьтесь, что он воспроизводится с последней версией и отправляется на bugs.php.net.
Воспроизвести код
interface I {}
$a = new A;
$b = new B;
class A {
function __construct() { echo 'A'; }
}
class B implements I {
function __construct() { echo 'B'; }
}
Ожидаемое
AB
Actual:
A
Fatal error: Class 'B' not found...
Это связано с тем, что интерфейс загрузки php и экземпляр класса класса, где есть определенный порядок и должен находиться в файле Php, если файл не соответствует порядку 1. Require_one interface, 2. Require_one класс
Прежде всего вы должны проверить, что интерфейс require_once (или include) может быть загружен до того, как ваш php файл класса
require_once 'classes/I3D.php';
require_once 'classes/book.php';