Производительность хранения глобальных констант в классе - PullRequest
2 голосов
/ 21 мая 2011

Я недавно начал использовать классы в своих проектах, и одно из применений заключается в установке и хранении глобальных констант в массиве private. Мне интересно, является ли это обычной практикой, плохой и, что самое важное, медленным, если я делаю много вызовов функции выборки в классе (например, когда мне нужно имя сайта, адрес электронной почты или детали MySQL) ).

Я не публикую код, потому что он действительно простой; просто функция, returns значение элемента в массиве с данным ключом.

Ответы [ 2 ]

2 голосов
/ 21 мая 2011

Не беспокойтесь об этом.
Пройдя по этому пути, вы перейдете к шаблонам Singleton и Registry.Не используйте эти шаблоны, это анти-шаблоны.

Попробуйте построить дизайн по ТВЕРДЫМ принципам , и ваши объекты будут соединяться все реже и реже.Имя сайта будет храниться в классе, который будет выводить контент на страницу, и другим классам эта константа не понадобится.Адрес электронной почты будет храниться только в классе Mailer (или в его файле конфигурации), и другим классам эта константа не понадобится.И так далее.

Класс, который содержит все константы и все конфигурации, это своего рода « объект Бога », и это тоже анти-паттерн (плохая практика).

Не беспокойтесь о производительности геттеров и сеттеров.

0 голосов
/ 21 мая 2011

Все будет хорошо, если вы не объявите сотни элементов в этом массиве, что будет очень приятно получить и установить:)

Здесь я замечаю, что вместо того, чтобы хранить всю информацию в приватном массиве, почему бы вам просто не объявить переменные экземпляра? Например, вместо

<?php
class Test() {
    private info = array('sitename' => 'Site Name'; 'database' => 'Database Name');
}
?>

Лучше бы так поступать

<?php
class Test() {
    private sitename = 'Site Name';
    private database = 'Database Name';
}

?>

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

<?php
$test = new Test();
echo $test->info['sitename'];
$test->info['database'] = 'testDB';
?>

Это выглядит лучше и удобнее с этим кодом ниже?

<?php
$test = new Test();
echo $test->sitename;
$test->database = 'testDB';
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...