Команда разработчиков

S
На сайте с 23.05.2004
Offline
316
#271
Aisamiery:
2. Нет. Свитч отработает как надо. Разница в том что первый выкидывает Fatal а второй Warning

Не про это.

require - подгружает код в любом случае, а выполняет его только в зависимости от логики.

include - подгружает код только когда к нему идет обращение.

Т.е. require используется только когда код всегда необходим, например ORM и прочее. В роутинге же лучше include, что бы убрать нагрузку на парсер и не грузить все подряд.

---------- Добавлено 20.03.2020 в 13:33 ----------

ArbNet:
У меня если нет обработчика запроса значит будет пустой ответ сервера просто. Любые не верные запросы будут игнорированы.

В смысле игнорированы ? Они судя по коду в initialization.php все уйдут.

Это просто подпись.
Aisamiery
На сайте с 12.04.2015
Offline
293
#272
Stek:
Не про это.
require - подгружает код в любом случае, а выполняет его только в зависимости от логики.
include - подгружает код только когда к нему идет обращение.

От куда вы такое взяли?

require аналогично include, за исключением того, что при ошибке он также выдаст фатальную ошибку уровня E_COMPILE_ERROR. Другими словами, он остановит выполнение скрипта, тогда как include только выдал бы предупреждение E_WARNING, которое позволило бы скрипту продолжить выполнение.

php.net

LazyLoad делается по другому принципу, через автолоадер и стандарт, например PSR-0 ранее или сейчас PSR-4

---------- Добавлено 20.03.2020 в 15:44 ----------

ArbNet:

А если подумать?
Я так сделал чтобы можно было просто добавлять другие обработчики или удалять если что не нужно. Элементарно Ватсон :)

Как раз, чтобы не лазить туда каждый раз когда вам надо добавить обработчик, существует паттерн (да кому нужна эта херня правильно? нормальные программисты срали на теорию разработки, пусть юзеры эту муть читают), называется Фабрика. Вы почитайте и еще раз подумайте, переосмыслите может быть как сделать так, чтобы с добавлением новых обработчиков не надо было править файл ядра и чтоб сторонние разработчики могли добавить свои (там как раз к системе событий потихоньку подойдёте).

Разработка проектов на Symfony, Laravel, 1C-Bitrix, UMI.CMS, OctoberCMS
ArbNet
На сайте с 27.10.2019
Offline
124
#273

Aisamiery, Фабрику знаю и прочие паттерны, вот только в роутинге они ни к чему(запросы могут быть разные от просто цифры счётчика допустим, расширение web у меня перенаправляет на сайт который работает на моей программе, json файла для ajax, др до готовой страницы). У меня не надо править ядро. Маршрутизация прописана в index под нужные для движка задачи, но кто знает что ещё может понадобится в будущем мне или другим пользователям, поэтому в индексе всё так просто.

Вот когда коучи начали рассказывать про паттерны. Все стали их везде втыкать надо и не надо.. А если подумать?

---------- Добавлено 20.03.2020 в 12:30 ----------

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

---------- Добавлено 20.03.2020 в 12:36 ----------

Stek:
В смысле игнорированы ? Они судя по коду в initialization.php все уйдут.

Запрос идёт допустим на api. Файла обработчика api.php нет.

switch отправит на строчку case 'api': @require CORE.'api.php';break;

@require файл обработчика не найдёт и остановит выполнение скрипта @ гасит сообщение об ошибке. Отправляется пустой ответ.

А любые другие запросы: если есть сессия то на публикацию сайта, если нет сессии то initialization в которой определяю девайс пользователя его расширение, включён ли JS и тд. перезагружаю страницу и выдаю результат уже под девайс пользователя

Обсуждение разработки на моём фреймворке https://discord.gg/23N4s9x2kp
Aisamiery
На сайте с 12.04.2015
Offline
293
#274
ArbNet:
Aisamiery, Фабрику знаю и прочие паттерны, вот только в роутинге они ни к чему(запросы могут быть разные от просто цифры счётчика допустим, расширение web у меня перенаправляет на сайт который работает на моей программе, json файла для ajax, др до готовой страницы). У меня не надо править ядро. Маршрутизация прописана в index под нужные для движка задачи, но кто знает что ещё может понадобится в будущем мне или другим пользователям, поэтому в индексе всё так просто.

Вот когда коучи начали рассказывать про паттерны. Все стали их везде втыкать надо и не надо.. А если подумать?

Блин хотел же закончить =)))

Знаете почему "индусский код" так называют? Есть такая байка, что индусам платят не за решенные задачи, а за кол-во строк кода, возьмём ваш пример:


// маршрутизация
$nav=pathinfo(trim($_SERVER['REDIRECT_URL'],'/'));
switch($nav['extension']){
case 'js': @require CORE.'js.php'; break;
case 'css': @require CORE.'css.php';break;
case 'api': @require CORE.'api.php';break;
case 'web': @require CORE.'web.php';break;
default:
if($_SESSION['ldt'])@require CORE.'publish.php';
else @require CORE.'initialization.php';
}

И чем больше расширений, тем больше строк будет кода, верно? При том приложение просто упадёт если файла не будет. Давайте в каждом case проверять наличие файла? Это еще добавит строк, а заказчик оплатить. А теперь давайте подумаем в чем разница?


$nav=pathinfo(trim($_SERVER['REDIRECT_URL'],'/'));
$file = sprintf('%s%s.php', CORE, $nav['extension']);

if (file_exists($file)) {
require $file;
} else {
require CORE . ($_SESSION['ldt'] ? 'publish.php' : 'initialization.php');
}

При том не важно сколько вы там решите добавить расширений и приложение не упадёт по сути никогда (ну надеюсь 2 файла в else всегда существуют).

При том сам роутинг вы так и не показали, как маршрутизируются конкретные урлы в самих этих файлах

ArbNet
На сайте с 27.10.2019
Offline
124
#275

Aisamiery, Согласен. В данном случае так будет меньше кода.

Наверно пока тестирую... не задумывался о том чтобы упростить.

Aisamiery:
При том сам роутинг вы так и не показали

вот мой publish.php


<?php
namespace core;
ini_set('display_errors',1);
ini_set('error_reporting',E_ALL);
ini_set('display_startup_errors',1);
//header('Set-Cookie: cross-site-cookie=name; SameSite=None; Secure');
// установим кодировку
setlocale(LC_ALL,'ru_RU.UTF-8');
// загрузим настройки конфигурации
$cnf=@parse_ini_file('config.ini',true);
if(!$cnf)exit(NAME.':> Нет файла конфигурации');
// установим навигацию модуль&действие
$mod=&$_SESSION['mod'];$act=&$_SESSION['act'];
// определим параметры запроса
if(!isset($nav['dirname'])){
list($mod,$act)=explode('/',$cnf['page']['site']);
$nav['dirname']=$mod;$nav['filename']=$act;
}elseif($nav['dirname']=='.'){$mod=$nav['filename'];
list($mod,$act)=explode('/',$cnf['page'][$mod]);
$nav['filename']=$act;
}else{
$nav['parameter']=explode('/',$nav['dirname']);
$mod=$nav['parameter'][0];$nav['dirname']=$mod;
if(count($nav['parameter'])>1)
unset($nav['parameter'][0]);
else unset($nav['parameter']);
}
// путь к странице
if($nav['filename'])$act=$nav['filename'];
$way=($mod=='control'?'node':'mods').'/'.$mod.'/'.$act.'.xml';
if(!file_exists($way)){
$bad=$way;$mod='site';$act='nopage';
$way='mods/'.$mod.'/'.$act.'.xml';
}
// установим скин
$skn=&$_SESSION['skn'];
if($mod=='control')$skn=$mod;
else{
if(isset($_POST['skin']))$skn=$_POST['skin'];
elseif(isset($_GET['skin']))$skn=$_GET['skin'];
elseif(isset($_COOKIE['skn']))$skn=$_COOKIE['skn'];
else{$skn=$cnf['skin'];$_COOKIE['skn']='';}
if(!is_dir('node/skin/'.$skn))$skn=$cnf['skin'];
if($_COOKIE['skn']!=$skn)setcookie('skn',$skn);
}
$err=[];// массив для ошибок
// получение информации об ошибке
set_error_handler(function($ern,$mes,$nfl,$lin){global $err;
array_push($err,"$ern [$nfl:$lin] $mes");
});
// при завершении выведем ошибки
register_shutdown_function(function(){global $err;
if($err)echo PHP_EOL.
'<!-- ERROR\'s REPORT'.PHP_EOL.
implode(PHP_EOL,$err).PHP_EOL.'-->';
});
// константа тестирования
define('test',isset($_POST['test']));
//print_r(get_defined_vars());
// запуск движка
Engine::Instance();
?>
IL
На сайте с 20.04.2007
Offline
435
#276

Aisamiery, командная работа набирает обороты..

Вот.. дошли до "pull request-ов" через форум 😂

... :) Облачные серверы от RegRu - промокод 3F85-3D10-806D-7224 ( http://levik.info/regru )
Aisamiery
На сайте с 12.04.2015
Offline
293
#277
ivan-lev:
Aisamiery, командная работа набирает обороты..
Вот.. дошли до "pull request-ов" через форум 😂

Ага, чёт я разошелся =)))

ArbNet:
Aisamiery, Согласен. В данном случае так будет меньше кода.
Наверно пока тестирую... не задумывался о том чтобы упростить.

Это не просто меньше кода, это дальнейшее добавление файлов без изменения index.php

Тем более, если даем возможность расширять эту часть систему без изменения index.php (помним это важно, чтобы система обновлялась она приходит с index.php)


$nav=pathinfo(trim($_SERVER['REDIRECT_URL'],'/'));
$file = sprintf('%s.php', $nav['extension']);

if (file_exists(EXTEND. $file)) {
require EXTEND. $file;
} elseif (file_exists(CORE . $file)) {
require CORE . $file;
} else {
require CORE . ($_SESSION['ldt'] ? 'publish.php' : 'initialization.php');
}

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

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

Ту ересь с роутингом что вы скинули даже комментировать не буду, она просто не читаемая, но по диагонали понятно что там просто полный ппц.

T7
На сайте с 19.09.2018
Offline
63
#278

Aisamiery, справедливости ради в мегафреймворке логика чуть другая - если нет файла CORE.'js.php' фатал_еррор должен быть:D

ArbNet
На сайте с 27.10.2019
Offline
124
#279

Aisamiery, Нашли к чему придраться :) Даже если оставить как есть, и будет много запросов мой движок не сдохнет, он не грузит на начальном этапе кучу всяких плагинов.. нужны они будут или нет и тд. просто идёт проверка есть ли обработчик. Мой индусский код погоды в данном случае не сделает.

А api на то и сделан чтобы сторонний разработчик через него мог добавить свой функционал если что. Или просто узел если что-то разместить на странице.

И не надо меня останавливать. Какой в этом вам прок? Я делаю для своих проектов. Кому интересно могут присоединиться, нет :) мне больше достанется

T7
На сайте с 19.09.2018
Offline
63
#280
ArbNet:
И не надо меня останавливать. Какой в этом вам прок?

Никто не останавливает. Намекают, что можно задуматься как это лучше сделать.

--------------

Пятница - день шофера🍿

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий