Include класс в классе - как происходит инклюд интепретатором?

joraxr

Новичок
Жили были 2 класса

PHP:
    class class_1 {
    	public function __construct() {
    		echo '1';
    	}
    }
    
    class class_2 {
    	public function __construct() {
    		echo '2';
    	}
    }
    
    $c_1=new class_1();
    $c_2=new class_2();
И они работали очень хорошо по отдельности

Потом решено было их переписть

PHP:
    class class_2 {
    	public function __construct() {
    		include 'class_1.php';
    		$c_1=new class_1();
    		echo '2';
    	}
    }
    
    $c_2=new class_2();
И вроде все было нормально

Но потом появился программист который решил обойтись без инклюда и переписал буквально
PHP:
    class class_2 {
    	public function __construct() {
    		class class_1 {
    			public function __construct() {
    				echo '1';
    			}
    		}
    		$c_1=new class_1();
    		echo '2';
    	}
    }
    $c_2=new class_2();
Вопрос:

Как интепретатор php разворачивает второй пример?

Ведь 3-й пример работать не будет если так буквально развернуть код

При include внутри класса куда происходит инклюд файла?

...............................................................
Видел что допустим инклюдят перед классом, допустимо ли инклюдить в классе?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
При include внутри класса куда происходит инклюд файла?

...............................................................
Видел что допустим инклюдят перед классом, допустимо ли инклюдить в классе?
Как насчет того, что бы читать документацию?
 

joraxr

Новичок
там написано про функции но не про классы
функции в классе могут быть статическими или приватными и т.д.
на простом примере все работает, но если сделать проект большим то происходят глюки, которые логикой не понять
нужен конкретный ответ на вопрос
т.е. все сейчас сводится к тому что нужно создавать файл в котором происходят инклюды и потом его подрубать к index.php а потом уже запускать классы и с ними работать
 
Последнее редактирование:

AmdY

Пью пиво
Команда форума
joraxr
всё сводится к PSR-0, почитай его.
 

joraxr

Новичок
автолоад там и так реализован, можносразу его подключить и вообще тогда бы этого вопроса не было
меня интересует как устроен пхп, это его баг или так и задумывалось

вот как у меня все работает

есть файл boot.php в нем инклюдятся все основные классы, в том числе класс Module (или можно врубитьа автолоад и не париться)
потом запускается статическая функция load::module();
в ней происходит поиск по папкам модулей-классов и они инклюдятся и сразу создаются их обьекты (конструкторы прописывают новые инструкции в роут)
классы модулей наследуются от класса Module который приинклюден в самом начале

в общем я понимаю из за наследования все модули должны быть в области видимости класса Module?

стоит ли переделывать поиск и инклюд модулей реализовав его в файле boot.php?
 

AmdY

Пью пиво
Команда форума
include 'class_1.php';
просто зарегистрирует твой класс в шлобальной области видимости, единственные отличия, что он подключится только во время вызова метода и будет видеть переменные метода из которого вызывается.
вроде в php вложенных классов пока нету, хотя с функциями такой способ проходит.

если очень хочется, воспользуйся тублзой, которая разобьёт это на опкоды.
 
  • Like
Реакции: WMix
Сверху