Почему я не могу использовать число в классе функций php publi c при запуске? - PullRequest
0 голосов
/ 26 мая 2020

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

public function 2testnew()
    {
        $pagetitle = "testnew";
        $this->SetVars(compact('pagetitle'));               
        return $this->render(dirname(__DIR__) . "/" . self::_VIEWS_PATH . "/" . self::_PAGES_DIR, __FUNCTION__, TEMPLATE_NAME);
    }

К сожалению, когда я начинаю имя своей страницы с «2» в начало имени страницы, мой веб-сайт перестает работать, а также в Notepad ++ он показывает цифру 2 оранжевым цветом, что означает, что что-то не так.

Я новичок в PHP, поэтому, пожалуйста, помогите мне . Как мне создать класс, начинающийся с числа, потому что я хочу создать страницу с номером в начале имени?

Спасибо за вашу помощь.

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

В ваших настройках отчетов об ошибках что-то не так. При правильной настройке вы получите что-то вроде:

Ошибка синтаксического анализа: синтаксическая ошибка, неожиданный '2' (T_LNUMBER)

Почему не PHP анализатор ожидает там символ 2? Потому что это недопустимое имя метода класса. По общему признанию, он не задокументирован там, где вы ожидаете, но его можно найти в главе functions (методы класса следуют тем же правилам, что и обычные функции):

Названия функций следуют те же правила, что и другие метки в PHP. Допустимое имя функции начинается с буквы или символа подчеркивания , за которым следует любое количество букв, цифр или подчеркиваний. В качестве регулярного выражения это будет выглядеть так: ^[a-zA-Z_\x80-\xff][a-zA-Z0-9_\x80-\xff]*$.

Если вам это абсолютно необходимо, как вы можете? Вы можете взломать его, например, magi c методами :

class MyController
{
    private function twotestnew($one, $two)
    {
        echo 'Calling ', __METHOD__, '() with arguments ', $one, ' and ', $two, "\n";
    }

    public function __call($name, $arguments)
    {
        $map = [
            '2testnew' => 'twotestnew',
        ];
        $name = mb_strtolower($name);
        if (isset($map[$name])) {
            return call_user_func_array([$this, $map[$name]], $arguments);
        }
        throw new RuntimeException('Not found');
    }
}

Это может потребовать много улучшений, но я надеюсь, что вы поняли идею. Вы можете протестировать приведенный выше код с помощью синтаксиса переменных functions (хорошо это или плохо, синтаксис не применяется к определениям функций):

$page = new MyController();
$page->{'2testnew'}('Foo', 'Bar');
0 голосов
/ 26 мая 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...