Пользователь пока ничего не рассказал о себе

Достижения

Все достижения (3)

Наибольший вклад в теги

Все теги (24)

Лучшие ответы пользователя

Все ответы (7)
  • Как можно решить проблему с доступам к методам PHP классов унаследованным от одного класса?

    alestro
    @alestro
    Как вариант можно сбрасывать скоп внутри метода $api->dependency

    class Node
    {
        protected function func1() {
        }
    }
    class NodeA extends Node
    {
        public function FUNC2() {}
    }
    class NodeB extends Node
    {
        // Функция инициализации
        public function __construct()
        {
            (new Api())->dependency(
                function (?NodeA $a) {
                    $a->FUNC2(); // Метод успешно вызывется так как он public
                    $a->func1();  // Call to protected method Node::func1() from global scope
                }
            );
        }
    }
    
    class Api {
        function dependency(callable $dependency) {
            if ($dependency instanceof Closure) {
                $dependency = Closure::bind($dependency, null, null);
                $dependency(new NodeA());
            }
        }
    }


    Либо можно использовать белый список и проверить стек вызовов, если вызывающего класса нет в списке, то кидать исключение.

    class Node
    {
        private array $whiteList = [
            NodeA::class
        ];
    
        protected function func1() {
            $scope = debug_backtrace(2, limit: 2)[1]['class'];
            if (!in_array($scope, $this->whiteList)) {
                throw new Exception('Нельзя вызвать метод для данного класса '. $scope);
            }
        }
    }
    class NodeA extends Node
    {
        public function FUNC2() {}
    }
    class NodeB extends Node
    {
        // Функция инициализации
        public function __construct()
        {
            (function (?NodeA $a) {
                $a->FUNC2(); // Метод успешно вызывется так как он public
                $a->func1();  // Нельзя вызвать метод для данного класса NodeB
            })(new NodeA());
        }
    }
    Ответ написан
    1 комментарий
  • Можно ли так у конструктора задавать параметры и не противоречит ли это принципу Барбары Лисков?

    alestro
    @alestro
    Смысл в том, что бы не поломалось поведение в потомке.
    class Mouse extends Animal {
        public function calcDamage() {
            throw new Exception('Мышь не наносит урон');
        }
    }
    Ответ написан
    Комментировать
  • Что будет за попытку взлома вк?

    alestro
    @alestro
    Тут нет состава ни 138 ни 272. Состав 272 ст. - материальный, то есть наличие общественно опасных последствий - обязательный признак объективной стороны данного состава. Диспозиция 272 ст. предусматривает что данные последствия заключаются в следующем: уничтожении, блокировании, модификации либо копировании компьютерной информации. Таким образом, если данные последствия не наступили, то нет объективной стороны, без объективной стороны нет состава. Что касается 138, то предмет - охраняемая законом тайна, объективная сторона выражается в любых противоправных действиях, которые нарушили эту тайну. Т.к. тайна не была нарушена, то нету объективной стороны, а значит нету и состава.
    Ответ написан
    Комментировать
  • Как закрыть доступ к странице, если пользователь не авторизован?

    alestro
    @alestro
    В personal_product.php добавить
    isset($_SESSION["username"]) ?: header('location: /login.php');

    И как вам указали выше
    $select = mysqli_query($conn, "SELECT * FROM employers WHERE username='$username' AND password='$password'");

    Ведет к sql-инекции.
    Ответ написан
    1 комментарий

Лучшие вопросы пользователя

Все вопросы (121)