За последние 24 часа нас посетили 16473 программиста и 1677 роботов. Сейчас ищут 855 программистов ...

Undefined class constant не могу разобраться..

Тема в разделе "PHP для новичков", создана пользователем HolodZhe, 25 июл 2017.

  1. HolodZhe

    HolodZhe Новичок

    С нами с:
    23 авг 2016
    Сообщения:
    57
    Симпатии:
    1
    Здравствуйте. У меня есть 3 файла .php (затронем только 2, т.к. проблема в 3 файл выливается из этого же):
    - Freekassa.php
    - FreekassaModel.php
    - FreekassaHandler.php

    В FreekassaHandler.php указано следующее:
    PHP:
    1. include '../config.php';
    2. include 'FreekassaModel.php';
    3. include 'Freekassa.php';
    В config.php
    PHP:
    1. class Config
    2. {
    3.     // Настроек от проекта в личном кабинете free-kassa.ru
    4.     const MARCHANT_ID = '51919';
    5. }
    Соответственно, у меня вызывается файл FreekassaHandler.php, в нем автатом подключаются через include config и freekassa.php.

    В freekassa.php есть следующий код (для дебага, тоже вызывается):
    PHP:
    1. private function GoTofreekassa($request)
    2.     {
    3.         $m = Config::MERCHANT_ID;
    4.         # $oa = $request['sum'];
    5.        # $o = 'Пополнение счета';
    6.        # $us_account = $request['account'];
    7.        # $s = md5(implode(':', array($m, $oa, $config['freekassa']['secret_key_1'], $o)));
    8.      
    9.         printf("id - %d", $m);
    10.  
    11.         // header("Location: //www.free-kassa.ru/merchant/cash.php?m={$m}&oa={$oa}&o={$o}&s={$s}&us_account={$us_account}");
    12.         return;
    13.     }
    --- Добавлено ---
    В итоге ошибка:
    Код (Text):
    1.  
    2. Fatal error: Undefined class constant 'MERCHANT_ID' in /home/users/d/demure-rp/domains/donate.demure-rp.ru/lib/Freekassa.php on line 85
    85 строка:
    PHP:
    1. $m = Config::MERCHANT_ID;
     
    #1 HolodZhe, 25 июл 2017
    Последнее редактирование: 25 июл 2017
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Опечатка в константе у тебя,внимательно посмотри
    PHP:
    1. $m = Config::MERCHANT_ID;
    PHP:
    1. class Config
    2. {
    3.     // Настроек от проекта в личном кабинете free-kassa.ru
    4.     const MARCHANT_ID = '51919';
    5. }
     
    HolodZhe нравится это.
  3. HolodZhe

    HolodZhe Новичок

    С нами с:
    23 авг 2016
    Сообщения:
    57
    Симпатии:
    1
    Да, только что сам заметил, но у меня другой вопрос, почему похожий вариант не катает с массивом?
    Например, в config.php у меня есть:
    PHP:
    1. $config = array(
    2.     'db' => array(
    3.         'host' => "-",
    4.         'user' => '-',
    5.         'pass' => '-',
    6.         'base' => '-'
    7.     ),
    8.     'freekassa' => array(
    9.         'merchant_id' => '51919',
    10.         'secret_key_1' => '-',
    11.         'secret_key_2' => '-',
    12.         'item_price' => '1',
    13.         'table_account' => 'accounts',
    14.         'table_account_name' => 'nickname',
    15.         'table_account_donate' => 'rubadd'
    16.     )
    17. );
    И когда вызываю в FreekassaHandler.php, то вроде все ок, даже выводится var_dump:
    PHP:
    1. array(7) { ["merchant_id"]=> string(5) "51919" ["secret_key_1"]=> string(8) "-" ["secret_key_2"]=> string(8) "-" ["item_price"]=> string(1) "1" ["table_account"]=> string(8) "accounts" ["table_account_name"]=> string(8) "nickname" ["table_account_donate"]=> string(6) "rubadd" }
    Но когда делаю тоже самое уже в Freekassa.php, то выводится NULL, хотя в Freekassa.php все подключается:
    PHP:
    1. include '../config.php';
    2. include 'FreekassaModel.php';
    3. include 'Freekassa.php';
    --- Добавлено ---
    Т.е. логика вся та же, но если в config.php создать class Config, то все хорошо, а если через массив то увы не работает(
     
  4. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    640
    Симпатии:
    381
    Я не могу без файлов сказать почему работает или не работает,потому что я не Ванга,но впринципе ты можешь задать массив константе:

    PHP:
    1. <?php
    2. class A {
    3.     const B = [
    4.                 1,2,3 =>[4,5,6]
    5.               ];
    6. }
    7. print_r(A::B);
    Код (Text):
    1. Array
    2. (
    3.     [0] => 1
    4.     [1] => 2
    5.     [3] => Array
    6.         (
    7.             [0] => 4
    8.             [1] => 5
    9.             [2] => 6
    10.         )
    11.  
    12. )