[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Инструкции включения
Гость_Юрий
Ребяты, вопрос на засыпку.
Внутри класса при помощи require_once включаю файл, который содержит другой класс (фабрика). Если вместо require_once поместить текст включаемого файла, то будет ошибка, а так нет. Как объяснить такое поведение интерпретатора?



Спустя 2 минуты, 17 секунд (21.05.2011 - 17:55) sharki написал(а):
Гость_Юрий
А в тексте сколько раз упоминается require_once ?

Спустя 5 минут, 43 секунды (21.05.2011 - 18:01) alex12060 написал(а):
Потому что, если класс Фабрика содержит другие включения файлов, то при включении файла Фабрика файл остается на своем месте, соответственно, ссылки для включения не нарушаются, но а если его физически перенести в другой файл, то соответственно надо менять ссылки для подключения других файлов.

Как то так)

Спустя 3 минуты, 56 секунд (21.05.2011 - 18:05) Гость_Юрий написал(а):
Не нужно "как-то" так, если не знаете, то не нужно говорить непонятные слова.

Спустя 7 минут, 52 секунды (21.05.2011 - 18:13) sharki написал(а):
Гость_Юрий
Ой зря вы так. Любой программист это НЕ дитя Ванга, которое может видеть чужие коды и анализировать его.

Спустя 10 минут, 59 секунд (21.05.2011 - 18:24) alex12060 написал(а):
Гость_Юрий

Как то так, так то так. Если не понимаете из вышесказанного ничего, то я уж не знаю.

Извольте предоставить свой код, который вызывает у Вас трудности, тогда и разберемся. Я вижу проблему только пока в этом.

Спустя 17 минут (21.05.2011 - 18:41) Guest написал(а):
// classes.php

class a {

public function get() {

echo 'Гав-гав';

}

}

// index.php

class b {

public static function get() {

require_once('classes.php');
return new a();

}

}

b::get()->get();

Тут всё пучком

Спустя 58 секунд (21.05.2011 - 18:42) Guest написал(а):
class b {

public static function get() {

class a {

public function get() {

echo 'Гав-гав';

}

}

return new a();

}

}

b::get()->get();

Тут ошибка, естественно

Спустя 1 минута, 14 секунд (21.05.2011 - 18:43) Гость_Юрий написал(а):
Вот код. Вопрос, думаю, глянете выше?

Спустя 3 минуты, 39 секунд (21.05.2011 - 18:47) alex12060 написал(а):
Как Вы сделали эти 2 класса в 1 файл?

Спустя 2 минуты, 9 секунд (21.05.2011 - 18:49) Greg1978 написал(а):
Это кто такой синтаксис определения классов придумал?
Учим теор часть!

Спустя 3 минуты, 3 секунды (21.05.2011 - 18:52) Guest написал(а):
Ребяты, вопрос на засыпку.
Внутри класса при помощи require_once включаю файл, который содержит другой класс (фабрика). Если вместо require_once поместить текст включаемого файла, то будет ошибка, а так нет. Как объяснить такое поведение интерпретатора?


// classes.php

class a {

public function get() {

echo 'Гав-гав';

}

}

// index.php

class b {

public static function get() {

require_once('classes.php');
return new a();

}

}

b::get()->get();

Тут всё пучком



class b {

public static function get() {

class a {

public function get() {

echo 'Гав-гав';

}

}

return new a();

}

}

b::get()->get();

Тут ошибка, естественно

Для быстрого поиска похожих сообщений выделите 1-2 слова в тексте и нажмите сюда Для быстрой цитаты из этого сообщения выделите текст и нажмите сюда
Быстрый ответ

Спустя 1 минута, 54 секунды (21.05.2011 - 18:54) alex12060 написал(а):
Потому что в классе писать класс нельзя!!


<?php
error_reporting(E_ALL);

class b {

public static function get() {

return new a();

}

}


class a {

public function get() {

echo 'Гав-гав';

}

}


b::get()->get();


die();
?>

Спустя 2 минуты, 22 секунды (21.05.2011 - 18:56) Greg1978 написал(а):
Это не поведение интерпритатора в целом, на уровне трансляции происходит ошибка так как такой синтаксис описания классов и их включения не правилен.

Спустя 4 минуты, 39 секунд (21.05.2011 - 19:01) Гость_Юрий написал(а):
Бля, вы чё там. )))
Инструкция require_once('classes.php') что делает? Включает текст своего файла вместо себя. Так? Я и спрашиваю, как такое может быть. Класс в классе! В одном случае (там где require_once('classes.php')) ошибки нет, а там где класс в классе - есть. А то что во втором случае синтаксис не правильный - это даже Шарику понятно.

Спустя 3 минуты, 32 секунды (21.05.2011 - 19:04) Greg1978 написал(а):
Ещё раз на пальцах.
Ошибка происходит на уровне трансляции.
Если немножечко погуглить можно узнать что инструкции включения не подставляют код в другой код а транслируются и исполняются отдельно, просто точка включения даёт команду интерпритации а не копирования кода и вставки его на место. Учим мат часть по серверу.

Спустя 15 минут, 30 секунд (21.05.2011 - 19:20) Гость_Юрий написал(а):
Спасибо Greg1978-у. Что-то вроде прояснилось. Хотя бытует мнение, что таким образом инструкцию require_once('classes.php') в фабрике не желательно использовать - это не правильно. Есть более правильное решение для фабрики?

Спустя 8 минут, 31 секунда (21.05.2011 - 19:28) Greg1978 написал(а):
Нет, в плане не использовать в рекурсии точки включения не стоит использовать с приставкой _once просто в этом случае интерпритатор дополнительно проверяет наличие уже странслированного файла smile.gif и если находит его то уже повторно не включает. Эти инструкции немного "тяжелее" своих "родителей".

Спустя 6 минут, 45 секунд (21.05.2011 - 19:35) Гость_Юрий написал(а):
Ага. Ещё раз спасибо, а то Евгений Панин утверждал, что так делать нельзя. Теперь буду знать, что он немножко лукавил.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.