Инициализация объекта в функции

player

Новичок
Инициализация объекта в функции

Подскажите, как сделать так чтобы объект, образованные в функции, был глобально доступен

function my_function(){

$myClass = new Inbox();

}

$myClass->getMessages();

заранее спасибо
 

Beavis

Banned
player
а зачем его инициализировать в функции, если он должен быть доступен глобально?
 

player

Новичок
Beavis
этот объект мне нужен только когда активна сессия. вся рутина для сессии спрятана в функции, там хранится все что мне нужно в данных случаях.
 

cDLEON

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

Santiago

Новичок
player
Для глобальной доступности объектов используются обычно паттерны синглтон или реестр. Копай в эту сторону.
 

player

Новичок
partizan
в том что в функции объект локален.. а должен быть глобальным для других функции

cDLEON
а без инклюда можно какнибудь?
 

IIIEPJIOK

Новичок
а так не подойдет?:
PHP:
function my_function(){

$myClass = new Inbox();
return $myClass;
}
$myClass= my_function();
$myClass->getMessages();
 

player

Новичок
А чем тебе не нравится инклуд?
не знаю.. бесстыдная процедуральность.. функции можно потом какнить перекроить.. может в класс какойнить..
а с инклюдами у меня ассоциируется только подключение функции и разным логик.. но не их вызов
 

Fred

Новичок
Автор оригинала: IIIEPJIOK
а так не подойдет?:
PHP:
function my_function(){

$myClass = new Inbox();
return $myClass;
}
$myClass= my_function();
$myClass->getMessages();
В итоге ты не получишь объект, который "глобально доступен". У тебя функция будет каждый раз возвращать новый объект.

Если очень хочется сделать функцию, которая возвращает глобальный объект, можно сделать так:

PHP:
function my_function () {
    static $obj;
    if (!$obj) $obj = new Inbox();
    return $obj;
}
 

Sluggard

Новичок
player
Варианты.
1. include. Включаемый файл обернуть в функцию не сложнее, чем функцию в класс.
2. Возвращать экзкмпляр класса.
3. Класс сделать синглтоном.
4. Создание экземпляра реализовать фунцией со статической переменной, где хранить данный экеземпляр.

Fred
А еще можно возвращать объект по ссылке ;)
function &my_function() {...}
Если, конечно, действительно очень хочется сделать функцию, которая возвращает НЕ новый объект.

-~{}~ 03.03.08 18:26:

У тебя функция будет каждый раз возвращать новый объект.
функция вызывается один раз. И эта функция вернет измененный объект, а не новый.
 

player

Новичок
Sluggard
Спасибо за перечисление всех возможностей, теперь буду выбирать..:)

ЕЩЕ:
У меня возникла еще одна проблема, если я создаю объект, который сохраняет данные из сессии..
НО когда я очищаю сессию, то естественно данные в объекте тоже пропадают..
что делать чтобы данные в объекте понастоящему копировались, а не ссылались на сессию?
 

dr-sm

Новичок
2 Sluggard: в пятом пхп объекты подефолту по ссылке передаюцо.

2 player: я как-то так обычно делаю
PHP:
// user.class.php
class user {
	private static $instance = null;
	
	public static function isLoggedIn() {
		return isset(self::$instance);
	}
	
	public static function getCurrent() {
		if (!isset(self::$instance)) {
			// try to initialize
		}
		return self::$instance;
	}
	
	private function __construct() {
		// ...
	}
}

// global.php
require_once('path/to/user.class.php');
$theUser = user::getCurrent();
 

Sluggard

Новичок
dr-sm
Хз. Я если не вижу аттрибутов пятерки, то пишу совместимый код.
 

player

Новичок
dr-sm
где можно прочитать про :: ?
я это давно уже искал.. только гугля не умеет искать знаки препинания :D
 

player

Новичок
2 player: я как-то так обычно делаю

// user.class.php
class user {
private static $instance = null;

public static function isLoggedIn() {
return isset(self::$instance);
}

public static function getCurrent() {
if (!isset(self::$instance)) {
// try to initialize
}
return self::$instance;
}

private function __construct() {
// ...
}
}

// global.php
require_once('path/to/user.class.php');
$theUser = user::getCurrent();
и это значит? вызов функции без существования объекта?

-~{}~ 04.03.08 14:56:

dr-sm
Да, оно
 

Sluggard

Новичок
getCurrent() - инициализируешь статическое свойство класса, если пользователь авторизован.
Внутри пишешь что-то вроде:
PHP:
    if (!isset(self::$instance)) {
      self::$instance = true;
    }
isLoggedIn() - соответственно проверка.
 

player

Новичок
У меня возникла еще одна проблема, если я создаю объект, который сохраняет данные из сессии..
НО когда я очищаю сессию, то естественно данные в объекте тоже пропадают..
что делать чтобы данные в объекте понастоящему копировались, а не ссылались на сессию?
что можно здесь сделать?
 
Сверху