Но вопрос в том, насколько это правильно, с точки зрения паттерна фабричного метода.Чет вы сильно путаете теплое с мягким... Внутренняя реализация классов созданных фабрикой НИКАК не влияет на "фабричность". Паттерн относится только к методу создания готовых объектов по определенным условиям. Какие это объекты вообще не суть важно. По сути они могут быть абсолютно разные, просто по логике чаще всего это однотипные объекты, отличающиеся в настройках или внутренней реализации (например все они реализуют один интерфейс, но внутри работают по разному).
//$role = $_SESSION['role'];
$role = 'moderator';
class Role{
public function checkPermission($action)
{
if(isset ($this->$action))
{
return $this->$action;
}
return false;
}
}
class admin extends Role{
protected $addItem = true;
protected $editItem = true;
protected $deleteItem = true;
}
class moderator extends Role{
protected $addItem = true;
protected $editItem = true;
protected $deleteItem = false;
}
class publicator extends Role{
protected $addItem = true;
protected $editItem = false;
protected $deleteItem = false;
}
class Factory{
public static function createUsers($role) : Role{
if(class_exists($role))
return new $role;
else
echo ("Роль".$role."отсутствует");
}
}
$login = Factory::createUsers($role);
var_dump($login);
// try to use in code:
if ($login->checkPermission('editItem')){
echo 'lets edit!';
};
<input type="file" name="avatar" accept="image/gif, image/jpeg">
облегчает человеку выбор верного форматаif(isset($file))
не гарантирует что файл загрузился, по этому нужно проверять еще и еррор, перед тем как передавать несуществующие свойства в функцию$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
ваще жесть, про хэш не слышали? Тем более еще и в разных регистрах называть файлы... $arr = str_replace('/\s/','',str_split($pin));
будет работать весьма неоднозначно, хотя бы по тому что str_split() не поддерживает работу с мультибайтовыми кодировками. Во вторых она там конечно же нафиг не нужна, так как str_replace() работает со строками в третьем аргументе, но зато не работает с регулярными выражениями в первом, по этому эта строка у вас вообще никак не работает. В остальном все вполне в лучших традициях бредогенераторов.Я включаю свой встроенный серверэто какой и во что он встроен у вас?
начинают подключаться все данные с проекта который я делал несколько месяцев назад, и интересно то что совсем с другого порта.В компьютерном понимании порт - это не стоянка судов и контейнеров, а условная адресация к области оперативной памяти, которую "слушает" или использует определенная программа. В данном случае ваш "встроенный сервер". Он "услышал" запрос на указанном порту и отдал тот же контент который и был у вас в его папке по умолчанию для показа (document root).
Что можно сделать в данной ситуации?Практически все "встроенные сервера" имеют файлы конфигурации, позволяющие настроить как основной document root, так и "алиасы" - много доменов на одном сервере, каждый со своим document root. Смотрите настройки для своего "встроенного сервера".
нужно при клике на чексбокс ajax-ом получить/фильтровать товар, который выводи этот файл Product.php1) Чекбоксы что у вас фильтруют?
не понимаю как в обработчике ajax запроса, взять эти данныеПлохо, значит пока еще слабо знаете свою предметную область. внизу вашего вопроса есть пример, эти данные там есть, что с ними делать зависит от того что нужно получить.
надо ли обращаться к этому файлу Product.phpВ представленном виде он бесполезен для вашей задачи, нужно писать метод получения списка из произвольных параметров. Потом сформировать из списка хтмл с готовыми блоками и отдать его (сделать echo) обратно. Только в аяксе надо будет заменить
dataType: 'html'
1. Делают ли так?Делают, но это не хорошая практика. Во первых имеете шанс затереть какие-то настроечные данные объекта и получить непредсказуемость поведения. Во вторых, если у вас там значения из бд или другого хранилища в формате ключ-значение, лучше хранить их в отдельном поле, том же дата, но в виде stdClass, чтобы не путать их при работе с хранилищем с остальными полями, например так:
public function setData(array $data):void{
$this->data = (object)$data;
}
на сервере site.ru/cp/admin.php, чтобы в браузере на самом деле отображалось site.ru/cp/panel (грубый пример).Для этого еще нужно обрабатывать скриптом, или писать отдельные правила серверу на каждый чих. То есть либо единая точка входа и роутер, либо жесткие правила в конфиге сервера.