Объект в методе другого класса. Область видимости

Apostol

Новичок
Здравствуйте, есть вопрос про реализацию доступа до объектов
PHP:
class some{
}
$var=new some;

class other{
  public function func(){
    print_r($var);
  }
}
Я понимаю, что у func есть своя область видимости и для нее $var не существует, у меня есть объект, который используется во многих функицях и везде указывать егo global не хочется, как решить проблему?
 

Beavis

Banned
PHP:
class other{
protected $var;
public function __construct($var)
{
$this->var = $var;
}

  public function func(){
    print_r($this->var);
  }
}
 

filipchuk

Новичок
тогда только так
PHP:
class some{
}
$var=new some;

class other{
  public function func($var){
    print_r($var);
  }
}
 

AmdY

Пью пиво
Команда форума
filipchuk
а может тоже почитаете ссылку, прежде чем давать заключительный диагноз?
 

fixxxer

К.О.
Партнер клуба
Хорошо бы, если бы автор пояснил конкретную ситуацию - что за $var и зачем его передавать. Иначе правильным будет издевательский ответ про global :)
 

Apostol

Новичок
Во первых авторизация юзера, хотелось бы все поместить в объект $user и обращаться к нему, $user->name, $user->surname и так далее..
Кроме того, контент страницы то есть $page->content, $page->footer и так далее
просто вызовов, проверок достаточно много получается, в каждую функцию пихать глобал это какой то быдло код мне кажется
 

filipchuk

Новичок
Для глобального объекта "пользователь" можно использовать паттерн "реестр" (он также описан по ссылке, размещенной выше AmdY)
Это не диагноз, просто вариант :), который сам использую
 

pav

Новичок
Во первых авторизация юзера, хотелось бы все поместить в объект $user и обращаться к нему, $user->name, $user->surname и так далее..
Кроме того, контент страницы то есть $page->content, $page->footer и так далее
просто вызовов, проверок достаточно много получается, в каждую функцию пихать глобал это какой то быдло код мне кажется
PHP:
class User {
	protected $vars = array();

	public function login(){
		$this->vars['login'] = 'pav';
		$this->vars['pass'] = 'putinpidor';
	}

	public function __get($key){
		return @$this->vars[$key];
	}
}

$user = new User();
echo $user->login; //pav
echo $user->pass; //putinpidor
 

pav

Новичок
Если значения нет, вернет false, но предупреждение не кинет. Не принципиально, но такое поведение более логично.
 

флоппик

promotor fidei
Команда форума
Партнер клуба

itprog

Cruftsman
флоппик
намного? из статьи " Any "optimization" between the calls is purely within the super-micro-micro optimization realm and is not going to make any application measurably faster."
А про null я знаю, именно из-за этого и предложил.
 
  • Like
Реакции: baev

fixxxer

К.О.
Партнер клуба
Он намного медленней, чем isset() кстати говоря.
Двойные кавычки еще давайте вспомним. :)

isset возвращает false для значения null, потому в общем случае не является средством проверки наличия ключа в массиве.
 

Вурдалак

Продвинутый новичок
А зачем вообще проверять наличие ключа в массиве? Никто из советующих array_key_exists не может объяснить зачем делать различие между NULL и отсутствием ключа.
 
Сверху