Включая файлы классов PHP - PullRequest
       23

Включая файлы классов PHP

2 голосов
/ 06 февраля 2012

Я пытался узнать о классах в PHP, и часть моего учебного процесса была в том, что я изучал различные библиотеки и тому подобное.Конечно, у меня осталось много вопросов, вот один из них.

При просмотре некоторых библиотек, основного файла, который вы вызываете для вызова библиотеки, они вызывают каждый из файлов библиотеки, вызывая их напрямуюНапример, вот как это делает библиотека диаграмм PHP:

<?php
require_once 'model/ChartConfig.php';
require_once 'model/Point.php';
require_once 'model/DataSet.php';
require_once 'model/XYDataSet.php';
require_once 'model/XYSeriesDataSet.php';

require_once 'view/primitive/Padding.php';
require_once 'view/primitive/Rectangle.php';
require_once 'view/primitive/Primitive.php';
require_once 'view/text/Text.php';
require_once 'view/color/Color.php';
require_once 'view/color/ColorSet.php';
require_once 'view/color/Palette.php';
require_once 'view/axis/Bound.php';
require_once 'view/axis/Axis.php';
require_once 'view/plot/Plot.php';
require_once 'view/caption/Caption.php';
require_once 'view/chart/Chart.php';
require_once 'view/chart/BarChart.php';
require_once 'view/chart/VerticalBarChart.php';
require_once 'view/chart/HorizontalBarChart.php';
require_once 'view/chart/LineChart.php';
require_once 'view/chart/PieChart.php';
?>

Однако я смотрю на другую библиотеку, и они просто автоматизируют процесс, вызывая каждый файл в каталоге с помощью метода автозагрузки PHP, например:this (Из руководства по php):

function __autoload($name) {
    echo "Want to load $name.\n";
    throw new Exception("Unable to load $name.");
}

Мне просто интересно, есть ли какое-либо преимущество или недостаток в том, чтобы делать это способом автозагрузки?

Ответы [ 5 ]

3 голосов
/ 06 февраля 2012

Я не верю, что у __autoload есть только преимущества. Но некоторые действительно есть.

Плюсы для __autoload

  • Вам не нужно вести длинный список включений, что может быть затруднительно, чтобы поддерживать порядок (что означает, что нельзя забывать включение)
  • Вы включаете только то, что вам действительно нужно: некоторые классы могут понадобиться только в каком-то особом сценарии, вы можете избежать этого

Плюсы для обычного пути

  • Это очень легко понять любому
  • Просмотр включенных файлов покажет вам, что делает файл
  • Вы управляете списком импортируемых классов (если вам не нужен класс, потому что он огромный или не работает, он никогда не будет включен)
  • Нет никакой сложности в функции __autoload. Если ваши классы находятся в сложной иерархии, вам просто нужно ввести имя, и вам не нужно писать сложный код, чтобы найти правильный файл.
  • Проще отлаживать: объем кода, который может вызывать беспокойство, ограничен включениями, которые вы сделали.

Это действительно вопрос стиля кодирования.

1 голос
/ 06 февраля 2012

Я думаю, что больше всего согласен с Cygal, но хотел бы изменить ответ с учетом PSR-0 . Я не думаю, что имеет смысл использовать автозагрузку, если вы не придерживаетесь этого стандарта.

Pro Autoloading

  • Нет необходимости вести список включения.
  • Вы включаете только то, что вам действительно нужно.
  • Код остается читаемым.
  • Вы следуете стандарту, принятому во всех основных средах PHP, поэтому вы можете ожидать, что люди знакомы с этим подходом.

Про старый стиль

  • Зависимости хорошо видны в заголовке файлов кода.
  • Нет необходимости сопоставлять имена классов и пути к файлам. Если вы часто используете автозагрузку, может потребоваться уменьшить время, затрачиваемое на повторный расчет этого отображения, с использованием кэша.

Подводя итог: я не вижу причин избегать автозагрузки , пока вы следуете PSR-0 !

0 голосов
/ 06 февраля 2012

Что сказал Марк. Кроме того, вы можете сохранить свой код СУХИМ, если это важно для вас.

0 голосов
/ 06 февраля 2012

Преимущество автозагрузки файлов заключается в том, что вам не нужно беспокоиться о загрузке файлов самостоятельно. И файлы загружаются только тогда, когда они необходимы.

Еще лучшая функция автозагрузки была бы новее: http://php.net/manual/en/function.spl-autoload-register.php

0 голосов
/ 06 февраля 2012

Использование автозагрузчика всегда выгодно.

  • Вам не нужны огромные коллекции включений в верхней части каждого файл
  • Вам не нужно беспокоиться о том, чтобы забыть о включении
  • Autoloader включает только те файлы, которые необходимы, и по мере необходимости

Потенциальные недостатки

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

Потенциального недостатка можно избежать, зарегистрировав автозагрузчик с помощью spl

...