Область объявления класса - PullRequest
3 голосов
/ 31 июля 2010

У меня есть файл classes.php, в котором я объявляю набор классов для использования в серии страниц. Затем на одной странице мне нужно использовать другой класс, который объявлен в отдельном файле. Теперь этот отдельный класс использует некоторые классы, расположенные в файле classes.php.

Итак, на большинстве страниц у меня есть:

[1]
<?php
require('classes.php');
[page code]
?>

, который работает нормально. Проблема возникает с той конкретной страницей, которая имеет:

[2]
<?php
require('classes.php');
require('separate_class.php');
[page code]
?>

и это не работает, потому что separate_class.php также требует classes.php.

Если я попробую это:

[3]
<?php
require('separate_class.php');
[page code]
?>

тогда это не работает, потому что теперь классы недоступны для этой страницы, даже если они объявлены внутри файла separate_class.php.

Очевидным решением, по-видимому, является включение отдельного класса в файл classes.php, что неуклюже, поскольку этот отдельный класс имеет смысл только в этой серии страниц, тогда как файл classes.php содержит классы общего назначения и поделился между различными приложениями.

Как я могу сделать это таким образом, чтобы я мог сохранить структуру, подобную показанной в [2], то есть отделять классы общего назначения от конкретного класса, который, в свою очередь, требует этих классов общего назначения, в то время как все еще можете использовать эти классы общего назначения на странице?

Ответы [ 2 ]

5 голосов
/ 31 июля 2010

Более разумным решением может быть разделение каждого класса в отдельный файл и использование автозагрузчика ...

http://php.net/manual/en/function.spl-autoload.php

4 голосов
/ 31 июля 2010

Вы хотите использовать require_once ()

EDIT: Вы не можете переопределить класс, если это то, что вы пытаетесь сделать.Я не знаю, как выглядит ваш код, но, возможно, наследование - это то, что вы ищете ??

РЕДАКТИРОВАТЬ 2: Мне удалось воспроизвести тольковаша ошибка, когда у меня был require 'classes.php' в файле Отдельный_класс.php И требуется 'classes.php' в сценарии, который вы фактически открываете.Таким образом, у вас есть 2 варианта:

  • Не require (или require_once) classes.php в вашем скрипте до того, как вам потребуется отдельный* повсюду (проверьте отдельный_класс.php) и не беспокойтесь о том, требуется ли файл.
...