не работает global

Статус
В этой теме нельзя размещать новые ответы.

Macintosh

Новичок
Всем привет! Подскажите, кто сталкивался, почему в таком случае не работает global?

PHP:
function a(){
	$a = 1;
	
	function b(){
		global $a;
		
		echo $a;
	}
	
	b();
}

a();
 

С.

Продвинутый новичок
В этом случае все работает правильно. Глобальная переменная не определена.
 

Фанат

oncle terrible
Команда форума
никто не сталкивался.
никому и в голову не придет такой идиотизм как определять функцию внутри функции и приправить это все глобалами.
 

Macintosh

Новичок
Вы правы, как-то сразу я не врубился, а как можно в таком случае, сделать переменную $a, доступной внутри функции b() не передавая ее функции как b($a)?
Дело в том, что мне нужно иметь возможность из функции b() работать с переменной $a.
 

Macintosh

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

С.

Продвинутый новичок
В РНР нет понятия "вложенных" функций. Писать так формально можно, но функция не приобретает никаких особых свойств связи с "внешней" функцией.
 

Macintosh

Новичок
В РНР нет понятия "вложенных" функций. Писать так формально можно, но функция не приобретает никаких особых свойств связи с "внешней" функцией.
Мне кажется это странным :( Почему бы нет! Тоесть никак нельзя? Придется писать много раз один и тотже код?
 

Absinthe

жожо
function myFunction($param1, $param2) {
....
return $result;
}

Обрати внимание на выделенный текст.
 

С.

Продвинутый новичок
Мне кажется это странным :( Почему бы нет! Тоесть никак нельзя? Придется писать много раз один и тотже код?
Какие-то подозрительные выводы ты делаешь из моих слов. Я лишь сказал, что код
PHP:
function a()
{
   function b()
   {
   }
}
эквивалентен коду
PHP:
function a()
{
}
function b()
{
}
Про повторение одного и того же кода -- твои странные додумки.
 

Macintosh

Новичок
function myFunction($param1, $param2) {
....
return $result;
}

Обрати внимание на выделенный текст.
:) это обычная функция, ты передаешь в нее два параметра, это все и ежу понятно, а мне нужно работать с переменной $a тоесть обновлять ее. Немного дополню свой примерчик чтобы стало понятнее :) Смотри!

PHP:
function a(){
	$src = '1.jpg';
	
	$src = imagecreatefromjpeg($src);
	
	if(Тут какое-то условие){
		function b(){
			global $src;
			
			Тут мы создаем новый ресурс
			imagecopy($new, $src, Тут параметры не важно какие, это для примера);
			
			Удаляем из памяти старый ресурс
			imagedestroy($src);
			
			Возвращаем новый ресурс
			return $new;
		}
		
		if(Тут какое-то условие){
			Теперь тут уже совсем новый ресурс
			$src = b();
		}
	}
	
	Если там выше условие не сработало, то используем первоначальный ресурс, если сработало, то ресурс уже новый
	imagecopyresampled($new, $src, Тут параметры не важно какие, это для примера);
}

a();
Но в таком варианте не работает global
Надеюсь так станет немного понятнее зачем я это делаю
Сразу говорю, тут кусков кода нет, это просто чтобы стало понятно, почему нужен такой функционал
 
Последнее редактирование:

С.

Продвинутый новичок
:) это обычная функция, ты передаешь в нее два параметра, это все и ежу понятно, а мне нужно работать с переменной $a тоесть обновлять ее.
Хочешь работать с переменной -- передай ее в фунцию, а потом верни обратно. Это даже ежу понятно, а ты все не догоняешь.
 

Macintosh

Новичок
Хочешь работать с переменной -- передай ее в фунцию, а потом верни обратно. Это даже ежу понятно, а ты все не догоняешь.
Да не проблема ее передать, проблема в том, что мне нужно удалить старый ресурс из памяти imagedestroy($src); прежде чем возвращать новый, в переменную $src; ведь если я обновлю $src; я потеряю ссылку на старый ресурс, и не смогу его удалить. Тут конечно можно делать другие имена переменных, да не проблема, но это еще нужно городить дополнительный код, а мне хотелось чтобы все было чистенько без лишнего мусора.
 

Фанат

oncle terrible
Команда форума
код не читал, но хочу сказать, что вопрос изначально надо было задавать в таком виде,
а не про слепых колченогих коней в вакууме

впрочем, я поторопился. код все такой же сферический.
Словами можешь сказать, что ты делаешь?
 
Последнее редактирование:

Macintosh

Новичок
код не читал, но хочу сказать, что вопрос изначально надо было задавать в таком виде,
а не про слепых колченогих сферических коней в вакуумн
Ну извините, я просто думал что есть простое решение, и нет смысла объяснять все тонкости кода, который давольно большой. Да можно все это сделать без функций и все будет просто и легко, но хотелось сократить на 20 строк код :) Можно там конечно создавать новые переменные и поставить условие, но это тоже дополнительный код, а если бы сработал global то все было бы просто супер, красиво :))
 

Фанат

oncle terrible
Команда форума
Думать вредно.
Перед тем, как начинать искать простые решения для велосипедов на квадратных колесах, сначала надо выучить таблицу умножения.
 

С.

Продвинутый новичок
мне нужно удалить старый ресурс из памяти imagedestroy($src); прежде чем возвращать новый, в переменную $src; ведь если я обновлю $src; я потеряю ссылку на старый ресурс, и не смогу его удалить.
А сохранить его во временной переменоой не судьба?. Обязатльно нужна глобальная?
а если бы сработал global то все было бы просто супер, красиво :))
Было бы супер уродливо.
 

Фанат

oncle terrible
Команда форума
Кто-нибудь понял, что он там химичит? можете объяснить? У него не получается
 

С.

Продвинутый новичок
Ничего он там не химичит, все до боли примитивно. Просто "альтернативный" ход мыслей у человека.
 

Macintosh

Новичок
А сохранить его во временной переменоой не судьба?. Обязатльно нужна глобальная?
Да судьба чегож не судьба, я об этом и говорю выше
Можно там конечно создавать новые переменные и поставить условие,
Но тогда придется еще городить кучу условий, ведь там может быть десяток вариантов. Ладно, меня не поняли, очень жаль.
Было бы супер уродливо.
Не чего уродливого там бы небыло, было бы намного меньше кода. А то что, я запутался с тем что $a всеже изначально не глобальная, ну так это просто невнимательность, со всеми бывает, я думал может есть другое решение.
Перед тем, как начинать искать простые решения для велосипедов на квадратных колесах, сначала надо выучить таблицу умножения.
Я очень сильно сомневаюсь, что вы знаете все возможности PHP, все функции наизусть все, все, все. Ну если вы только всю жизнь не программируете на PHP с утра до ночи, или если вы не гений, что бы держать в голове всю эту информацию. В таком случае, все кто тут на форуме задает вопросы, не знают таблицу умножения(ваши слова).
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху