Используйте возврат функции напрямую без переменной


Извините за мой английский, не могу найти правильные слова в Google, чтобы понять, почему он так себя ведет. Должно быть, это очень легко решить!

Я использую PHP 7 и хочу использовать возврат, предоставляемый функцией для запроса (привязать его). Если я вызову функцию напрямую в своей функции привязки, она ничего не вернет. Если я вызову его снаружи, например, $var = функция($a) и использую $var в функции привязки, это сработает.

Я не понимаю, почему я не могу напрямую использовать эту функцию? Если я сделаю это в параметрах функция (например, функция getId($this->getName(1))) работает. почему этого не происходит здесь? Код:

Не работает

        $this->bdd->query("UPDATE stats_of_the_days
                            SET winner_firstsolves = :winner_fs
                            WHERE id = :stat_id");

        $this->bdd->bind("winner_fs", $this->getTodayWinnerFs($winnerID), PDO::PARAM_INT);
        $this->bdd->bind("stat_id", $statID, PDO::PARAM_INT);

        $this->bdd->execute();

Работает (используя переменную для вызова/сохранения функции/возврата)

    $var = $this->getTodayWinnerFs($winnerID);

    $this->bdd->query("UPDATE stats_of_the_days
                        SET winner_firstsolves = :winner_fs
                        WHERE id = :stat_id");

    $this->bdd->bind("winner_fs", $var, PDO::PARAM_INT);
    $this->bdd->bind("stat_id", $statID, PDO::PARAM_INT);


    $this->bdd->execute();

Функция довольно простая

public function getTodayWinnerFs($userID)
    {
      // query stuff
      return $this->bdd->resultObj()->Wins;
    }

Пример возврата функции

var_dump($this->getTodayWinnerFs(494));
// string(2) "13"

Функция "привязка" из моего класса pdo бд

        public function bind($param, $value, $type = null)
        {
            if (is_null($type)) {
                switch (true) {
                    case is_int($value):
                        $type = PDO::PARAM_INT;
                        break;
                    case is_bool($value):
                        $type = PDO::PARAM_BOOL;
                        break;
                    case is_null($value):
                        $type = PDO::PARAM_NULL;
                        break;
                    default:
                        $type = PDO::PARAM_STR;
                }
            }
            $this->stmt->bindValue($param, $value, $type);
        }

Спасибо вам!

Author: kinoute, 2016-11-30

1 answers

Заключается в том, что метод getTodayWinnerFs() и основной разделяют $this->bdd, и при неправильном вызове он находится в другом статусе, я думаю, вам следует придерживаться рабочего примера и не выполнять вызовы функций внутри вызовов функций, это затруднит чтение.

 5
Author: vikkio, 2016-11-30 15:10:43