Почему глобальное $ object_name обескуражено?

У меня есть два класса, и в настоящее время я ссылаюсь один на другой, используя это:

 ClassB :: FUNC ()
 {
     глобальный $ classAObject;
     echo $ classAObject-> whatever ();
 }

Тем не менее, мне сказали, что использование global не рекомендуется. Это и почему?

Существует много причин не использовать глобальные переменные. Вот лишь несколько:

  1. Объем
    • В большой системе может быть легко случайно переназначить глобальные переменные, если вы повторно используете одно общее имя
    • Переменные в глобальном масштабе увеличивают объем памяти ваших сценариев. Не всегда важно, но может быть
    • В некоторых других языках нет необходимости захватывать ваши глобальные переменные – они доступны по умолчанию – это может привести к ошибкам, если вы забудете объявить переменную с одинаковым именем как локальную
  2. Связь
    • В хорошем программном обеспечении компоненты должны быть слабо связаны. Глобальные переменные подразумевают жесткую связь.
  3. Обслуживание
    • Глобальная переменная может быть изменена любым другим кодом в любом месте. Особенно в больших системах это может сделать отладку существующего кода или добавление нового кода кошмаром.

Лучший способ обработать пример, который вы дали в своем сообщении, – это передать объект, содержащий нужные вам данные.

 classB::func($obj) { echo $obj->whatever(); } $obj = new classAObject; classB::func($obj); 

Причина заключается в том, что он взрывает идею инкапсуляции ООП. Это гораздо лучше сделать:

 ClassB::func($classAObject) { echo $classAObject->whatever(); }