Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP: ООП
Войти
Регистрация
Восстановить пароль
 
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 293
1

Ошибка наименования функции

14.06.2018, 12:22. Просмотров 242. Ответов 13
Метки mvc, oop, php (Все метки)

PHP
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
class bootstrap {
    public function __construct() {
        $url = $_GET['url'];
        $url = rtrim($url, '/');
        $url = explode('/', $url);
        $file = __DIR__.'/controllers/'.$url[0].'.php';
        
        if(file_exists($file)) {
            require $file;
        } else {
            require __DIR__.'/controllers/errors.php';
            $controller = new errors();
            return false;
        }
        if(isset($url[2])) {
            $controller->$url[1]($url[2]);
        } else {
        if(isset($url[1])) {
            $controller->$url[1]();
        }
        }
    }
}
($url[]) - Array ( [0] => help [1] => other [2] => 123 )
Fatal error: Uncaught Error: Function name must be a string in /home/host1682382/myweb-service.ru/htdocs/dev/system/bootstrap.php:18 Stack trace: #0 /home/host1682382/myweb-service.ru/htdocs/dev/index.php(6): bootstrap->__construct() #1 {main} thrown in /home/host1682382/myweb-service.ru/htdocs/dev/system/bootstrap.php on line 18

18 строка - $controller->$url[1]($url[2]);
В чем может быть проблема,
например /help/other/123 ошибка
например /help/other/ ошибка
например /help/ нет ошибки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2018, 12:22
Ответы с готовыми решениями:

Ошибка в сигнатуре функции
Выводит: Catchable fatal error: Argument 2 passed to Monitor::log() must be an...

Парсинг ошибка функции eval
Добрый день. Объясните мне пожалуйста для чего нижние методы производят...

Ошибка выполнения функции file на Хосте
Доброе время суток уважаемые форумчане! Помогите в следующем вопросе! написал...

Ошибка наименования. Проверьте права доступа
Есть планшет Samsung Galaxy Tab 3 8,0 (SM - T310),встроенная память 16 Гб еще...

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

13
Jewbacabra
Эксперт PHP
3515 / 2920 / 1306
Регистрация: 24.04.2014
Сообщений: 8,880
14.06.2018, 12:47 2
PHP
1
$controller->{$url[1]}();
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 293
15.06.2018, 08:59  [ТС] 3
До этой строчки скрипт не доходит даже
0
Jewbacabra
Эксперт PHP
3515 / 2920 / 1306
Регистрация: 24.04.2014
Сообщений: 8,880
15.06.2018, 09:48 4
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
До этой строчки скрипт не доходит даже
Как может до нее не доходить, если в ней ошибка?
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 293
15.06.2018, 11:54  [ТС] 5
($url[]) - Array ( [0] => help [1] => other [2] => 123 )
Fatal error: Uncaught Error: Function name must be a string in /home/host1682382/myweb-service.ru/htdocs/dev/system/bootstrap.php:18 Stack trace: #0 /home/host1682382/myweb-service.ru/htdocs/dev/index.php(6): bootstrap->__construct() #1 {main} thrown in /home/host1682382/myweb-service.ru/htdocs/dev/system/bootstrap.php on line 18

18 строка - $controller->$url[1]($url[2]);
В чем может быть проблема,
например /help/other/123 ошибка
например /help/other/ ошибка
например /help/ нет ошибки

Добавлено через 1 минуту
18 строчка это не
PHP
1
$controller->$url[1]();
, а
PHP
1
$controller->$url[1]($url[2]);
Сделал по аналогии, ошибка та же самая
0
Jewbacabra
Эксперт PHP
3515 / 2920 / 1306
Регистрация: 24.04.2014
Сообщений: 8,880
15.06.2018, 17:07 6
Исправленный код и текст ошибки в студию
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 293
15.06.2018, 17:09  [ТС] 7
ошибка та же самая
Array ( [0] => help [1] => other )
Fatal error: Uncaught Error: Function name must be a string in /home/host1682382/myweb-service.ru/htdocs/dev/system/bootstrap.php:21 Stack trace: #0 /home/host1682382/myweb-service.ru/htdocs/dev/index.php(6): bootstrap->__construct() #1 {main} thrown in /home/host1682382/myweb-service.ru/htdocs/dev/system/bootstrap.php on line 21

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
class bootstrap {
    public function __construct() {
        $url = $_GET['url'];
        $url = rtrim($url, '/');
        $url = explode('/', $url);
        $file = __DIR__.'/controllers/'.$url[0].'.php';
        
        if(file_exists($file)) {
            require $file;
        } else {
            require __DIR__.'/controllers/errors.php';
            $controller = new errors();
            return false;
        }
        print_r($url);
        if(isset($url[2])) {
            $controller->$url[1]($url[2]);
        } else {
        if(isset($url[1])) {
            $controller->$url[1]();
        }
        }
    }
}
0
Jewbacabra
Эксперт PHP
3515 / 2920 / 1306
Регистрация: 24.04.2014
Сообщений: 8,880
15.06.2018, 17:17 8
Я вижу в точности такой же код как и был
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 293
21.06.2018, 11:40  [ТС] 9
Array ( [0] => help [1] => other )
Fatal error: Uncaught Error: Call to a member function other() on null in /home/host1682382/myweb-service.ru/htdocs/dev/system/bootstrap.php:21 Stack trace: #0 /home/host1682382/myweb-service.ru/htdocs/dev/index.php(6): bootstrap->__construct() #1 {main} thrown in /home/host1682382/myweb-service.ru/htdocs/dev/system/bootstrap.php on line 21


PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
<?
class bootstrap {
    public function __construct() {
        $url = $_GET['url'];
        $url = rtrim($url, '/');
        $url = explode('/', $url);
        $file = __DIR__.'/controllers/'.$url[0].'.php';
        
        if(file_exists($file)) {
            require $file;
        } else {
            require __DIR__.'/controllers/errors.php';
            $controller = new errors();
            return false;
        }
        print_r($url);
        if(isset($url[2])) {
            $controller->{$url[1]}($url[2]);
        } else {
        if(isset($url[1])) {
            $controller->{$url[1]}();
        }
        }
    }
}
0
Jewbacabra
Эксперт PHP
3515 / 2920 / 1306
Регистрация: 24.04.2014
Сообщений: 8,880
21.06.2018, 12:10 10
Не определена переменная $controller
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 293
21.06.2018, 12:43  [ТС] 11
Почему? если так Array ( [0] => help ), то нет ошибок и я перехожу в контроллер. ошибка возникает если есть после слеша что то, причем не важно создан у меня метод или нет
0
Jewbacabra
Эксперт PHP
3515 / 2920 / 1306
Регистрация: 24.04.2014
Сообщений: 8,880
21.06.2018, 12:55 12
Владислав-2012, на 18 и 21 строках используется переменная $controller. Где она объявлена?
Если после 16 строки добавитьvar_dump($controller); то будет видно что нет такой переменной.
0
Владислав-2012
2 / 2 / 1
Регистрация: 31.01.2012
Сообщений: 293
21.06.2018, 13:41  [ТС] 13
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?
class bootstrap {
    public function __construct() {
        $url = $_GET['url'];
        $url = rtrim($url, '/');
        $url = explode('/', $url);
        $file = __DIR__.'/controllers/'.$url[0].'.php';
        if(file_exists($file)) {
            require $file;
            $controller = new $url[0];
        } else {
            require __DIR__.'/controllers/errors.php';
            $controller = new errors();
            return false;
        }
       // print_r($url);
       // var_dump($controller);  
 
        if(isset($url[2])) {
            $controller->{$url[1]}($url[2]);
        } else {
            if(isset($url[1])) {
                $controller->{$url[1]}();
            }
        }
    }
}
Если я правильно понимаю, то так правильно, а как сделать если есть метод то делаем, а если нет метода, то общий метод
0
Evgen1337
203 / 123 / 58
Регистрация: 10.12.2017
Сообщений: 444
25.06.2018, 23:12 14
Надо попробовать тьму фреймворков, чтобы осознать как надо... https://www.slimframework.com/
это смерть:
Цитата Сообщение от Владислав-2012 Посмотреть сообщение
require __DIR__.'/controllers/errors.php';
$controller = new errors();
0
25.06.2018, 23:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.06.2018, 23:12

Замена наименования DataGridView
Есть много таблиц DataGridView но код для них одинаковый. Что бы не делать...

Вывести Наименования поставщиков
Вывести Наименования поставщиков из Нижнего Новгорода, которые поставляют...

Отображение наименования вместо ID
Привет всем. Нужна помощь. У меня есть 2 таблицы: 1. Monitor_Manufactures,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru