Я пытаюсь создать класс TestClass
который разделен на несколько файлов. Я разделил его на 3 файла, где первый файл TestClassPart1.php
имеет начало класса class TestClass {
и последний файл TestClassPart3.php
имеет закрывающую скобку класса. Это 3 файла
//TestClassPart1.php <?php class TestClass { public function func1(){ echo "func 1"; } //TestClassPart2.php <?php public function func2(){ echo "func 2"; } //TestClassPart3.php <?php public function func3(){ echo "func 3"; } }
Затем я рекомбинирую в фактическом файле класса TestClass.php
поэтому TestClass.php – это всего лишь клей всех трех файлов.
<?php require 'TestClassPart1.php'; require 'TestClassPart2.php'; require 'TestClassPart3.php';
Я думал, что это должно работать, но когда я пытаюсь создать экземпляр TestClass
и вызывать одну из функций, я получаю parse error, expecting T_FUNCTION' in C:\wamp\www\TestClassPart1.php on line 5
. Строка 5 – }
функции func1()
<?php require 'TestClass.php'; $nc = new TestClass(); $nc->func1();
Разве это не работает? Я думал, что вы можете распространять класс по нескольким файлам без проблем. Я делаю это неправильно?
Когда вам require
файл, PHP будет анализировать и оценивать содержимое.
Вы являетесь неполным, поэтому, когда PHP анализирует
class TestClass { public function func1(){ echo "func 1"; }
он не может понять класс, потому что закрытие} отсутствует.
Просто как тот.
И предвидеть свой следующий вопрос. Эта
class Foo { include 'methods.php' }
тоже не будет работать.
Из руководства PHP по ООП 4 (не удалось найти его в 5)
Вы не можете разбить определение класса на несколько файлов. Вы также НЕ можете разбить определение класса на несколько блоков PHP, если разрыв не находится в объявлении метода. Следующие действия не будут работать:
<?php class test { ?> <?php function test() { print 'OK'; } } ?>
Однако допускается следующее:
<?php class test { function test() { ?> <?php print 'OK'; } } ?>
Если вы ищете горизонтальное повторное использование, либо дождитесь появления PHP.next, который будет включать в себя черты или взглянуть на
Некоторое время назад у меня была такая же мысль, как чисто академический интерес. Невозможно делать то, что вы просите, хотя вы можете использовать PHP для создания PHP, который затем оценивается сервером.
Короче:
Краткая история:
Вместо этого: используйте надлежащие методы ООП для разделения функциональности на классы и расширения существующих классов.
Если вы должны сделать это таким образом, вы можете использовать include_once()
чтобы напрямую вставить файл в свой скрипт.