Добрый день. У меня такая задача: сделать класс, который будет обрабатывать приходящий со сервера JSON и делать из него необходимую строку. Так как у меня пока нет функционала по приходящему json, то я для примера беру данные json из файла. Вопросы у меня такие: 1) правильно ли я делаю обращение к классу? 2) работает ли сама функция? если нет, можете подсказать, где у меня ошибка? PHP: <?php // ниже прмер json, который я беру из файла /*{ "journal": { "title": "Lobachevskii Journal of Mathematics", "issn": "1995-0802" }, "issue": { "title": "Volume 23", "year": "2006" }, "title": "Maximum Entropy Wave functions", "authors": [ { "author": "Per K. Jakobsen" }, { "author": "Valentin V. Lychagin" } ], "file" : [ { "ext": "DVI", "href": "https://lobachevskii-dml.ru/public/collections/ljm/Volume_23/.." }, { "ext": "PS", "href": "https://lobachevskii-dml.ru/public/collections/ljm/Volume_23/.." }, { "ext": "PDF", "href": "https://lobachevskii-dml.ru/public/collections/ljm/Volume_23/.." } ], "abstract": "different text.", "keyword": [ "Maximum entropy principle", "Quantum mechanics", "Wavefunctions", "Probability theory", "Density matrix" ], "msc": [ "82B99", "81Q99", "81P15", "94A17" ] }*/ class Сitation { public function createCitationMLA($file){ $arrParams = json_decode($file, true); $journalTitle = $arrParams['journal']['title']; $journalIssn = $arrParams['journal']['issn']; $issueTitle = $arrParams['issue']['title']; $issueYear = $arrParams['issue']['year']; $title = $arrParams['title']; /*foreach ($arrParams['authors'] as $authors){ $strAuthors .= $authors; } $arr = array(); foreach ($arrParams['file'] as $key => $value){ if (array_key_exists('ext', $value)) { array_push($arr, $value); } } $abstract = $arrParams['abstract']; foreach ($arrParams['keyword'] as $keyword){ $strKeyword .= $keyword; } foreach ($arrParams['msc'] as $msc){ $strMsc .= $msc; }*/ // если разкомментировать, то все foreach выдают ошибку Invalid argument supplied for foreach() $strCitation = $journalTitle . ' ' . $journalIssn; return $strCitation; } } $file = file_get_contents('./data.json'); $test = new Сitation(); $main=$test->createCitationMLA($file); // здесь обращаюсь к функции класса echo 'citation:'. $main; // и хочу вывести возвращаемой значение функции из класса Спасибо Вам за любую подсказку или помощь.
Если Вам надо получить на выходе это Код (Text): citation:Lobachevskii Journal of Mathematics 1995-0802 то вроде все в порядке)) работает)) но в данном контексте можно сделать функцию статической.. создание объекта в данном случае вроде как и не нужно..
Странно, у меня почему-то выводит только 'citation' а саму строку нет... Значит обращение к функции класса правильное? Если так, то значит где-то я неправильно в функции что-то делаю...
81 и 82 заменяем на: PHP: return implode ( ' ', $arrParams['journal'] ); и удаляя строки нелогичные в таком случае 59 - 60 --- Добавлено --- 88 - 90 PHP: printf ( 'citation:%s', Сitation::createCitationMLA( file_get_contents ( $_SERVER['DOCUMENT_ROOT'] . '/data.json' ) ) );
MouseZver, спасибо большое за помощь! Изменил указанные строки, функцию изменил на статическую. Но, видимо, что-то не так в функции, так как выдает ошибку: implode() [function.implode]: Invalid arguments passed Также, если я убираю комментирование в PHP: foreach ($arrParams['authors'] as $authors){ $strAuthors .= $authors; } то падает ошибка: Invalid argument supplied for foreach() Буду разбираться, почему так.