@devalex89

PHP ссылки — хорошо или плохо?

Заметил что far-free часто встречается использование ссылок
fatfreeframework.com/framework-variables

каждый раз когда надо что то добавить или изменить
он создает ссылки, напр простой код
$f3->set('key1.key2', 'val'); 
$f3->get('key1.key2');
$f3->set('key1', 'val1');
$f3->set('colors',array('red','blue','yellow'));
$f3->push('colors','green'); // works like PHP's array_push()
echo $f3->pop('colors'); // returns 'green'


это удобно, но во всех случаях происходит такое (метод ref)
$var=&$this->hive; // array([key1] => array([key2] = 
$var=&$var->$part;//part key1
$var=&$var->$part;//part key2
return $var;
//после массив выглядит как
 array(&[key1] => array(&[key2] =


полный код метода &ref($key,$add=TRUE)
function &ref($key,$add=TRUE) {
		$null=NULL;
		$parts=$this->cut($key);
		//...
		if ($add)
			$var=&$this->hive;
		else
			$var=$this->hive;
		$obj=FALSE;
		foreach ($parts as $part)
			if ($part=='->')
				$obj=TRUE;
			elseif ($obj) {
				$obj=FALSE;
				if (!is_object($var))
					$var=new stdclass;
				if ($add || property_exists($var,$part))
					$var=&$var->$part;
				else {
					$var=&$null;
					break;
				}
			}
			else {
				if (!is_array($var))
					$var=array();
				if ($add || array_key_exists($part,$var))
					$var=&$var[$part];
				else {
					$var=&$null;
					break;
				}
			}
//...
		return $var;
	}
  • Вопрос задан
  • 293 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
больше ссылок богу ссылок.

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

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы