Возврат объектов в php - PullRequest
9 голосов
/ 04 мая 2010

Я вижу похожие вопросы, задаваемые, но у меня, похоже, проблемы с более простыми вещами, чем были заданы. Как объявить переменную в php? Моя конкретная проблема заключается в том, что у меня есть функция, которая читает таблицу БД и возвращает запись (только одну) в виде объекта.

class User{
   public $uid;
   public $name;
   public $status;
}

function GetUserInfo($uid)
{
   // Query DB

   $userObj = new User();

   // convert the result into the User object.

   var_dump($userObj);   
   return $userObj;
}

// In another file I call the above function.

....

$newuser = GetUserInfo($uid);

var_dump($newuser);

В чем здесь проблема, я не могу понять. По сути var_dump() в функции GetUserInfo() работает нормально. var_dump() снаружи после звонка на GetUserInfo() не работает.

Ответы [ 3 ]

10 голосов
/ 04 мая 2010

При использовании PHP5 это работает:

<code><pre>
<?php

class User{
   public $uid;
   public $name;
   public $status;
}

function GetUserInfo($uid)
{

   $userObj = new User();
   $userObj->uid=$uid;
   $userObj->name='zaf';
   $userObj->status='guru';
   return $userObj;
}

$newuser = GetUserInfo(1);
var_dump($newuser);

?>
object (User) # 1 (3) {["uid"] => int (1) ["name"] => string (3) "zaf" ["status"] => string (4) "guru"}
0 голосов
/ 03 сентября 2015

Я сталкиваюсь с той же проблемой. Однако я использую 5.6.1. Вот что я делал неправильно:

class component
{
public function myFunc() 
{
$obj = new SomeComp();
try {
do some work 
return $obj;
} finally {
$obj = null;
}
}

Все в методе класса работало нормально, у $ obj была информация при возврате. Однако результаты следующего дали нулевое значение:

$myClass = new component();
$myObj = $myClass->myFunc();
var_dump($myObj);  // returns NULL

Установка $ obj = null; в методе класса попробуй ... окончательно уничтожил $ obj, делая $ myObj NULL. Убрал $ obj = null; и метод возвращает правильную информацию.

0 голосов
/ 04 мая 2010

Сначала создайте новый экземпляр вашего User класса. Затем используйте этот экземпляр для вызова вашей функции и укажите параметр $ uid, чтобы ваш запрос выполнялся так, как если бы он был. Если в вашей таблице данных есть совпадение, ваш Userobject будет заполнен данными DB.

Лично я предпочитаю использовать статические вызовы, это делает ваш код намного более читабельным и компактным.

Разница:

$userObj = new User();
$user = $userObj->GetUserInfo('your uid');

Или

$user = User::GetUserInfo('your uid');

И я вижу странный } в строке 4. Поправьте меня, если я не прав, но я думаю, что это должно быть после } из функции GetUserInfo($uid).

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