Никаких зависимостей в коде, кроме указанных в комментариях нет. Но, при прямом указании пути для переменной $file в виде строки все отрабатывает нормально, но если я пытаюсь получить это же значение свойства private $Config из метода public function getConfig() то на строке if (!file_exists($file)) происходит что-то странное. Выполнение программы от нее отскакивает и выполняется заново (весь код начиная со старта) и во второй раз срабатывает нормально. Говорят ларчик просто открывается, но я уже голову потерял в поисках ключика от этого ларчика. PHP: private $Config = ''; public function getConfig() { return $this->Config; } private function setPathApplication($name) { if ($name === 'admin') { $dir = DIR_ROOT; // DIR_ROOT - Заранее предустановленная константа // $this->CORE["key-components-url"] - заранее установленный массив слов // значение $name ('main') есть в массиве CORE["key-components-url"] } elseif (in_array($name, $this->CORE["key-components-url"])) { $dir = DIR_COMPONENTS; // DIR_COMPONENTS - Заранее предустановленная константа } else { $dir = DIR_APPLICATIONS; // DIR_APPLICATIONS - Заранее предустановленная константа } // $dir$name/config.php = "D:/OSPanel_5_3_5/domains/gtstudio.ru/applications/main/config.php" $this->Config = "$dir$name/config.php"; } public function __construct() { parent::__construct(); $this->CORE['crypt'] = new \components\crypt\CryptData(); $this->setPathApplication($this->ROUTE['params'][0]); $_SESSION['seek-start'] ++; // ВОТ!!!! тут начинается непонятка. При использовании этой конструкции присвоения // $file = $this->getConfig(); // $_SESSION['seek-start'] ++; - два раза увеличивается на единичку // а $_SESSION['seek-end'] ++; (в конце метода) - всего один раз прибавляет единичку // ( а должно быть тоже два раза) $file = $this->getConfig(); // А вот при использовании этой конструкции // $_SESSION['seek-start'] ++; - два раза срабатывает на прибавление единички // и $_SESSION['seek-end'] ++; (в конце метода) - тоже 2 раза увеличивается на единичку // значения переменной $file в обоих случаях одинаковы // работает на ура ..... // $file = "D:/OSPanel_5_3_5/domains/gtstudio.ru/applications/main/config.php"; // не пойму, почему эта строка if (!file_exists($file)) возвращает работу кода в начало if (!file_exists($file)) { // Эта срока не влияет //die(__GTR('url_is_not_application')); } $_SESSION['seek-end'] ++; }
в пояснения не вникал, но по логике вещей к конструкторе должна производиться первоначальная инициализация, и вы должны не читать $file = $this->getConfig();, который по сути может еще и не установлен, а задать значение или через сеттер, которого у вас нет, либо напрямую PHP: $this->Config = '??? кстати а откуда он инициализаруется'; а, заметил откуда... допустим надеюсь вы не думаете, что операция ++ два раза увеличивает переменную на 1, то есть дает +2 ? и наверное все значения в сессии тоже перед началом проверили? В целом похоже на то, что класс вызывается два раза. только в одном случае видит путь, в другом файл не существует, отсюда разные значения
Да проверил все. На момент попытки получить значение из свойсва $this->Config оно уже имеет значение 'D:/OSPanel_5_3_5/domains/gtstudio.ru/applications/main/config.php', все как и задумано. Это значение устанавливается в конце метода privatefunction setPathApplication($name) - $this->Config="$dir$name/config.php"; . Метод естественно вызывается из конструктора. Переменные сессии $_SESSION['seek-start']++ и $_SESSION['seek-end']++ установлены чисто для отслеживания ошибки и больше нигде не используются. И каждый раз они прибавляют одну единичку. Просто этот код в программе срабатывает дважды, посему в нормальном порядке каждый раз значение увеличивается на 2 единицы. Так и должно быть. Но при первом включении почему-то работа кода отскакивает от if(!file_exists($file)) и вся программа начинает работать заново. При второй попытке все отрабатывает нормально. Трабла в том, что весь код, который работает до этой точки тоже дважды отрабатывает, что уже ни в какие ворота не лезет (((
чудес на свете не бывает значит вы два раза его вызываете покажите код вызова класса, а понятия "отскакивает код" - нет такого понятия
код в студию с тестом http://sandbox.onlinephpfunctions.com/ --- Добавлено --- PHP: <?php $a = [1]; $b = &$a[0]; $b++; print_r ($a);
Все. всем спасибо. Нашел. Совсем в другом месте был баг. В дальнейшем коде файл, которого к сему моменту уже не было. Все стало нормально отрабатывать, Вот только незадача, почему не сработал die(__GTR('url_is_not_application')) , Но это уже для дальнешей работы не критично. уже сам разберусь. нaшел методом $_SESSION['seek-bag'] [] = $this->Config; PHP: if (!file_exists($file)) { die(__GTR('url_is_not_application')); } Ну здесь проще. Вы увеличиваете на единицу $b, которая является ссылкой на $а, которая, кстати, является массивом.