Я написал несколько классов, которые необходимо создать при использовании.Статическая ссылка объекта класса
Моя цель состояла в том, чтобы иметь идеальную организацию при попытке создать динамический доступ между экземплярами классов.
В одном классе у него было бы несколько методов, которые он называет, исходя из того, что он только что сделал. Внутри одного из этих методов будут методы из других классов. (В настоящее время статические методы) Я бы отредактировал эти строки, чтобы контролировать поведение между классами.
Что я имею ввиду, будучи динамическим, если один из статических методов недоступен или будет доступен позже, тогда он просто выполняет другой метод для выполнения задачи внутри.
Мой вопрос является предметом озабоченности надлежащего ООП. Я не уверен, есть ли лучший способ, или если что-то может сделать проблемы. Хотя, он работает очень хорошо.
У меня есть пример, подготовленный ниже. Из них - это представление, а не реальная ситуация. executingFileOne - это одна ситуация, а ExecutingFileTwo - другая.
executingFileOne.php
require_once 'login.php';
$login = new Login();
require_once 'serverData.php';
$servDat = new serverData();
//blah blah blah
executingFileTwo.php
require_once 'serverData.php';
$servDat = new serverData();
//blah blah blah
login.php
class Login {
private static $thisClass = null;
public function __construct(){
//Get and set user data.
self::setStaticClass($this);
}
public static function setStaticClass(&$inputClass){
self::$thisClass = $inputClass;
}
//Methods Methods Methods
//---Methods Executed by class at specific times---------------
// - - - Used to get input from other classes
//Methods Methods Methods
//-------------------------------------------------------------
//---Methods for other classes.--------------------------------
// - - - Used to output data to other classes
public static function getUserID(){
die('Test'.self::$thisClass->userID);
}
//Methods Methods Methods of other classes.
//-------------------------------------------------------------
}
serverData.php
class serverData {
private static $thisClass = null;
public function __construct(){
//work work work
//an IF statement detected needing to register userID on serverData
$this->registerOnServer();
//work work work
self::setStaticClass($this);
}
//Methods Methods Methods
public function registerOnServer(){
//work work work
$this->userID = $this->getUserID();
//add userID to registration data.
}
//---Methods Executed by class at specific times---------------
// - - - Used to get input from other classes
private function getUserID(){
if (class_exists('Login')) {
return Login::getUserID();
} else {
return 0;
}
}
//-------------------------------------------------------------
//---Methods for other classes.--------------------------------
// - - - Used to output data to other classes
//Methods Methods Methods of other classes.
//-------------------------------------------------------------
}
Я не знаком с этой альтернативой. – TrinaryAtom
Я посмотрел, но одна из моих проблем заключается в том, что в определенных ситуациях один класс не вызывается все время. Чтобы это сработало, мне пришлось бы редактировать сотни страниц, чтобы это работало. И если бы я изменил его, мне потребовалось бы отредактировать эти сотни файлов ... Я думаю. Возьмем, к примеру, класс Login требуется классу serverData, но класс Login не всегда доступен. – TrinaryAtom
Ahh, исправление старого кода может быть .. проблемой. Вот почему я начинаю все новые проекты с DI/IoC с самого начала. Во всяком случае, хороший контейнер IoC также будет поддерживать * дополнительные зависимости * или, альтернативно, можно использовать * mock зависимость * (он выполняет требование DI, но на самом деле «ничего не делает», если он используется). Важно то, что что один и тот же интерфейс предоставляется (и что служба работает как ожидалось в контексте). – user2864740