У меня проблемы с отображением .$app->reactieDoor($topic['id']);, он покажет мне ошибку, и я понятия не имею, почему он это делает! пожалуйста, помогите мне.
Ps Я новичок, поэтому, если мне что-то не хватает в коде, скажите мне.
Строка с ошибкой:
echo ' laatste reactie: ' .$app->tijd_reactie($topic['id']) . ' door ' .$app->reactieDoor($topic['id']);
ошибка отображается только тогда, когда я пытаюсь использовать эту часть:
.$app->reactieDoor($topic['id']);
Код функций:
function reactieDoor($topicid) {
$this->database->query("SELECT klanten.voornaam, klanten.achternaam FROM reacties
LEFT JOIN klanten ON klanten.id=reacties.klant_id
WHERE reacties.topic_id=:topic_id ORDER BY create_time DESC LIMIT 1");
$this->database->bind(":topic_id", $topicid);
$reactie = $this->database->single();
return $reactie;
}
Я получаю ошибку

@ B3none Я все еще не смог найти проблему
Я предполагаю, что $this->database->single(); возвращает массив (содержащий имя и фамилию), поэтому, когда вы return $reactie;, вы возвращаете массив ... поэтому вы пытаетесь интерполировать массив в ...' door ' .$app->reactieDoor($topic['id']);
Понятно, я использовал var_dump и теперь вижу, есть какие-нибудь советы, как это сделать правильно? @ CD001






.$app->reactieDoor($topic['id']);
эта строка кода дает вам массив вместо одного результата. попробуйте var_dump результат.
var_dump( $app->reactieDoor($topic['id']) );
и вы увидите, что это массив
Понятно, но как мне тогда это сделать?
Я предполагаю, что $this->database->single(); возвращает массив (содержащий имя и фамилию), поэтому, когда вы return $reactie; из функции, это массив, который вы пытаетесь интерполировать в строку ... отсюда и ошибка.
Поскольку этот массив должен содержать имя и фамилию, попробуйте сначала присвоить это переменной $name и использовать вместо этого.
Что-то вроде:
$name = "Mysterious Stranger";
if ($n = $app->reactieDoor($topic['id'])) {
$name = "{$n['voornaam']} {$n['achternaam']}";
}
echo " laatste reactie: "
. $app->tijd_reactie($topic['id'])
. " door {$name}";
Возможно, лучше сделать это в функции если, эта функция всегда должна возвращать строку, содержащую имя.
В этом случае вы можете вместо этого изменить функцию на это:
function reactieDoor($topicid) {
$this->database->query("SELECT klanten.voornaam, klanten.achternaam FROM reacties
LEFT JOIN klanten ON klanten.id=reacties.klant_id
WHERE reacties.topic_id=:topic_id ORDER BY create_time DESC LIMIT 1");
$this->database->bind(":topic_id", $topicid);
$reactie = $this->database->single();
return $reactie ?
"{$reactie['voornaam']} {$reactie['achternaam']}" :
"Mysterious Stranger";
}
Да, он должен всегда показывать 2 вещи, но не могу ли я просто использовать этот код ?: echo ' laatste reactie: ' .$app->tijd_reactie($topic['id']) . ' door ' .implode($app->reactieDoor($topic['id']) );
^ должен работать до тех пор, пока id, переданный функции, действителен - я бы опасался передавать недопустимый идентификатор в функцию и возвращать что-то вроде false, что сломало бы implode(), и все. @thattommm
Я использовал функцию, которую вы описали, и хорошо работал, подскажите, какую из них мне следует использовать? implode() или ваша функция? плюсы и минусы?
Преимущество использования модифицированной функции состоит в том, что она имеет встроенную ловушку ошибок - если по какой-то причине $reactie = $this->database->single(); выйдет из строя и выдает что-то фальшивый, тогда функция вернет Таинственная незнакомка - вы всегда получите строку обратно, чтобы вы всегда знали, что вы имея дело с. Однако, если вы уверены, что исходная функция всегда вернет массив, тогда мощь будет более гибким, чтобы оставить его и использовать implode() в вашем выводе (дает возможность извлечь имя или фамилию по мере необходимости, как в моем первом примере).
Вы изучали использование PDO? php.net/manual/en/book.pdo.php