За последние 24 часа нас посетили 20142 программиста и 1077 роботов. Сейчас ищут 674 программиста ...

Использование полученной переменной функции в другой функции

Тема в разделе "PHP и базы данных", создана пользователем lesha73, 4 дек 2020.

  1. lesha73

    lesha73 Новичок

    С нами с:
    4 дек 2020
    Сообщения:
    8
    Симпатии:
    0
    Добрый день.
    Столкнулся с проблемой, скорее всего элементарной для знающего php, но все мои потуги решить вопрос, не увенчались успехом.

    Есть php файл, который формирует на выходе фид по товарам опенкарт, нужен для передачи полученных данных в турбо-страницы Яндекса. Т.к. это тема Яндекса, изначально обратился к ним, они сказали, что то что сделано, то сделано, вопросами доработок не занимаются.

    Вот код php выводящий данные о валюте (мне здесь нужен параметр "rate"):
    Код (Text):
    1.  
    2.     protected function generateCurrencies(ShopInfo $shopInfo)
    3.     {
    4.         $currencies = $shopInfo->getCurrencies();
    5.         if (empty($currencies)) {
    6.             return '';
    7.         }
    8.         $result = '    <currencies>' . PHP_EOL;
    9.         foreach ($currencies as $currency) {
    10.             $plus   = $currency->getPlus() ? ' plus="'.$currency->getPlus().'"' : '';
    11.             $result .= '      <currency id="'.$currency->getId().'" rate="'.$currency->getRate().'"'.$plus.' />'.PHP_EOL;
    12.         }
    13.         $result .= '    </currencies>' . PHP_EOL;
    14.         return $result;
    15.     }
    Вот что выводит данная функция, мне здесь интересна цифра - 92, это так сказать курс.
    Код (Text):
    1.  
    2. <currencies>
    3. <currency id="EUR" rate="92" plus="1"/>
    4. </currencies>
    Следующая часть кода выводит товарную позицию (не вывожу весь код, т.к. он большой, меня здесь интересует цена):
    Код (Text):
    1.  
    2.     protected function generateOffer(Offer $offer)
    3.     {
    4. .
    5. .
    6. .
    7.         $result .= '        <price>' . $offer->getPrice()*92 . '</price>' . PHP_EOL;
    8. .
    9. .
    10. .
    Так вот вместо цифры 92, которую сейчас я вписываю вручную, я хочу сюда получить rate из выше указанной функции.
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    создай свойство
    записывай туда свой рате без/с по айди, нейм ключами
    создай метод getRate
    Вызывай getRate после generateCurrencies

    в чем проблема ?
    --- Добавлено ---
    Перестраивай класс. У тебя фарш очевидный
     
  3. lesha73

    lesha73 Новичок

    С нами с:
    4 дек 2020
    Сообщения:
    8
    Симпатии:
    0
    :) если б я в этом настолько глубоко разбирался... всё что смог умножить на цифру требуемого курса

    Честно сказать даже не очень понимаю как сделать вышеописанное :(

    вот это не понимаю - /записывай туда свой рате без/с по айди, нейм ключами/

    /Перестраивай класс. У тебя фарш очевидный/
    Это не мой фарш, это php-шник Яндекса, а я пытаюсь для себя его автоматизировать
     
    #3 lesha73, 4 дек 2020
    Последнее редактирование: 4 дек 2020
  4. lesha73

    lesha73 Новичок

    С нами с:
    4 дек 2020
    Сообщения:
    8
    Симпатии:
    0
    что-то типа этого?
    Код (Text):
    1.  
    2. public $kurs = $rate;
    3.  
    4. public function dgetRate() {
    5. echo $this->$kurs;
    6. }
     
  5. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    зачем сразу echo? return
     
  6. lesha73

    lesha73 Новичок

    С нами с:
    4 дек 2020
    Сообщения:
    8
    Симпатии:
    0
    не работает ((
     
  7. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    что не работает?
    понятие о синтаксисе php хоть есть?
    ошибки умеете смотреть?

    Код (Text):
    1. public $kurs = $rate;
    не проканает....

    Код (Text):
    1. public $kurs;
    потом в конструкторе, или методе сеттера
    Код (Text):
    1. $this->kurs = 92;
     
  8. lesha73

    lesha73 Новичок

    С нами с:
    4 дек 2020
    Сообщения:
    8
    Симпатии:
    0
    Ладно, закрываем тему, я в начале сообщения явно дал понять, что php не знаю, только на уровне примеров и методом проб и ошибок. ошибки смотреть не умею, конструкторами и сеттерами не пользовался никогда.

    Попробую найти форум, где на пальцах объяснят, извините за ваше потраченное время :(
     
  9. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.817
    Симпатии:
    735
    Адрес:
    Татарстан
    перефразируя на авто....
    - пацаны надо в движке поршни отрегулировать - никогда там ничего не делал, могу открыть капот и залить масло, могу тряпочкой протереть.
    - ну снимаешь верхнюю часть двигателя. потом проверяешь прокладки, меняешь сальники, вытаскиваешь поршня, измеряешь штангенциркулем, штангенциркулем пользоваться умеешь?
    - нет, я ж сказал, что новичок и нечего в этом не понимаю.... плохой форум, непонятный... пойду на дургой... где кашку пожуют и в ротик положат, а учится и знания добывать - не по мне
     
    lesha73 нравится это.
  10. lesha73

    lesha73 Новичок

    С нами с:
    4 дек 2020
    Сообщения:
    8
    Симпатии:
    0
    примерно так и есть, не моя тема - php, провозился 2 дня с этой проблемой, понял, что самому не разобраться, написал сюда, благо форум именно по php. почитал ответы, попробовал как подсказали, ничего не вышло, буду дальше копать

    за ответы конечно отдельное спасибо
     
  11. Drunkenmunky

    Drunkenmunky Активный пользователь

    С нами с:
    12 авг 2020
    Сообщения:
    1.476
    Симпатии:
    281
    PHP:
    1. <?php
    2. $xml = simplexml_load_string('<currencies>
    3. <currency id="EUR" rate="92" plus="1"/>
    4. </currencies>');
    5.  
    6. $result = $xml->xpath("//currency[@id='EUR']");
    7.  
    8. foreach ( $result[0]->attributes() as $key => $value )
    9. {
    10. echo "$key: $value <br/>";
    11. }
    12.  
    13. ?>
     
  12. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
    @lesha73, вот простенький примерчик.
    Вкратце: делаем класс-наследник, в котором переопределяем два метода и добавляем одно свойство и метод получения данных из этого свойства.
    В методе generateCurrencies() - заполняем наше свойство (массив курсов валют) и вызываем "родительский" метод.
    Метод generateOffer() полностью копируем из исходного класса и добавляем умножение на курс валюты
    --- Добавлено ---
    Соответственно, в "Есть php файл, который формирует на выходе фид по товарам опенкарт" заменяем использование исходного класса на класс-наследник
     
  13. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.734
    Симпатии:
    1.315
    Адрес:
    Лень
    Прочти ответ автора под моим постом.
     
  14. lesha73

    lesha73 Новичок

    С нами с:
    4 дек 2020
    Сообщения:
    8
    Симпатии:
    0
    Вот это круто, в примере, прямо как из моего проекта, верхние классы в отдельных файлах, но примерно такие и есть. Буду пробовать, когда доберусь до компа.
     
  15. lesha73

    lesha73 Новичок

    С нами с:
    4 дек 2020
    Сообщения:
    8
    Симпатии:
    0
    Всё получилось, спасибо ВСЕМ огромное спасибо. Все без исключения подсказывали правильное решение, правда с учетом моего абсолютного незнания тонкостей программирования, я не понимал что, куда и как...

    Отдельное спасибо @Sail - "разжевал и в рот положил" :)

    @ADSoft - форум отличный, понимаю Ваше негодование.
    Приходят тут всякие типа меня, и всё хотят сразу получить на блюдечке с голубой каемочкой, когда возьми да выучи.
    Но я не ради изучения спрашивал, мне разово надо было решить проблему, возможно, я немного разобрался что такое свойство, что такое метод, какие команды это всё делают, но понял это на примерах от @Sail и скорее всего больше никогда не столкнусь с данной ситуацией.