Почему я не могу вернуть строку из вызывающего метода внутри класса? - PullRequest
0 голосов
/ 20 апреля 2020

Я только учусь PHP и у меня есть вопрос.

Вот класс, который я создал

class keens{
public $userid, $codeq, $codetest, $qposition, $ans, $testid, $last, $keencode, $topicid, $datekeencomplete, $datenow;

function __construct() {
    $this->userid = $_SESSION['id'];
}

public function keencheck(){

    $sql="SELECT MAX(date) FROM `keencomplete` WHERE `topic_id`=$this->topicid";
    $run=mysqli_query(DBConnect::$conn, $sql) or die(mysqli_error());
    $row=mysqli_fetch_array($run);
    $this->datekeencomplete=new DateTime($row[0]);
    $this->datenow=new DateTime(null, new DateTimeZone('Asia/Almaty'));

    $interval=date_diff($this->datekeencomplete, $this->datenow);
    $result=$interval->format('%d');

    $check=is_string($result)? 'true':'false';

    echo $result;
    echo $check;
}

}

Когда я проверяю $ result показывает, что он содержит «2» и является строкой «2true».

Однако, когда я пытаюсь вернуть $ result и использовать его в этом коде

    $interval=new keens();
    $interval->topicid=1;
    $interval->keencheck();

    echo $interval;

, я получаю следующая ошибка: Исправимая фатальная ошибка: объект класса keens не может быть преобразован в строку в C: \ xampp \ htdocs \ Ikeen \ views \ v_tests. php в строке 16

в print_r ($ интервал) показывает следующее, это не то, что я возвращаю, верно?

keens Object ( [userid] => 48 [codeq] => [codetest] => [qposition] => [ans] => [testid] => [last] => [keencode] => [topicid] => 1 [datekeencomplete] => DateTime Object ( [date] => 2020-04-17 12:39:51.000000 [timezone_type] => 3 [timezone] => Europe/Berlin ) [datenow] => DateTime Object ( [date] => 2020-04-20 12:32:50.990006 [timezone_type] => 3 [timezone] => Asia/Almaty ) )

Извините, если я сделаю что-то глупое. Есть идеи, почему я не могу получить возвращаемое значение функции в классе?

Ответы [ 2 ]

1 голос
/ 20 апреля 2020

1) Вам нужно поставить

return $result;

в конце вашей функции keencheck(), чтобы она действительно возвращала значение. Прямо сейчас он ничего не возвращает.

2) Вам необходимо отобразить значение, возвращаемое при вызове этой функции. Прямо сейчас вы пытаетесь повторить весь ваш объект, который является экземпляром класса keens.

$interval=new keens();
$interval->topicid = 1;
echo $interval->keencheck();
0 голосов
/ 20 апреля 2020

Попробуйте вот так * Функция 1001 *: функция list () используется для присвоения значений списку переменных за одну операцию.

Примечание: Эта функция работает только для числовых массивы.

public function keencheck(){
    /* your code */
    return array($result, $check);
}

$interval = new keens();
$interval->topicid=1;
list($result, $check) = $interval->keencheck();

echo $result;
echo $check;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...