Всем привет!!!!
У меня есть маленький вопрос!!
есть метод класса ...
function method($db){
$this->db=&$db;
}
function method(&$db){
$this->db=$db;
}
Какой из этих методов более верен!!!
Просто во втором случаи, как мне кажется я передаю ссылку, а во втором случае я передаю сам обьект, и вотом в методе можно его изменять!!
Это так чисто интерес!! То есть чтобы код выглядел более правильно и красиво!!
Второй вариант правильней. Функция сразу будет получать указатель.
В первом же случае производится копирование переменной, а потом уже присвоение по указателю.
Кстати если ты используешь PHP5 а $db это обьект, то можно не ставить амперсанд, так как 5 работает с обьектами по ссылке.
А я чё-то вообще не пойму в чём вопрос-то заключается? Что значит "верный способ"? Оба способа верны! Если надо использовать указатель на переменную внутри самой функции, то это первый способ. Ты конкретно говори что хочешь получить. Если надо напрямую изменить переменную вне функции, то понятно что надо использовать амперсенд при входе (как заметил Томас) - иначе она будет использовать копию, так:
Код:
function method1(&$d)
{
$this->$d=$d+5;
return $this->$d;
}
$n=10;
print method1($n);
или так:
Код:
function method2($d)
{
$this->$d=$d+5;
return $this->$d;
}
$n=10;
print method2(&$n);
если хочешь в функции использовать глобальную переменную, то так её там и объявляй как global, непонятно к чему это спрашивалось, самые азы всё-таки, не думаю что ты не мог бы написать в каком-нить редакторе свои функции и проверить...
function method1(&$d)
{
$this->$d=$d+5;
return $this->$d;
}
$n=10;
print method1($n);
return тут лишний.
А вообще правильно все спросил как по моему. Если будет видно что функция принимает указатель, то это будет понятней при повторном использовании чем догадываться что указатель скрыт внутри.
Всмысле лишний? Очень интересно. Я его там прописал, чтоб мне значение нужной переменной возвратилось при принте. И причём здесь понятно-непонятно? Если мне НАДО использовать указатели только в пределах одной функции (и НИГДЕ больше), что я уже неоднократно делал, то мне никаких указателей принимать не надо. Если мне их надо принимать, то принимаю при обращении к ней (функции).
вот так вот будет правильней иначе смысл ставить указатель ?
Опять знакомая вода в ступе...Насчёт ретурна - всё там правильно (один из способов). Я написал (представь себе что у меня функция на 500 строк) для внутренней, чтобы было видно что первый вариант тоже катит как ни крути (только для другой задачи). Кстати, в твоём примере не понял где ты ссылаешься на $n (может вместо "$this->id" хотел вписать чтоб разница в значениях была налицо...)
function method1(&$d)
{
$d+=5;
}
$n=10;
method1($this->id);
print $this->id;
Да я запарился. Serg_HD пиши как знаешь. Человек по моему правильно спросил, если у него возник такой вопрос, то он ищет наиболее правильное решении и использование. У тебя же все способы верны.
Thomas не обращай на него внимание!!! Спасибо!!!! У меня просто был чисто интерес, можно даже так сказать согласиться со своими мыслями, то есть моя точка зрения была верна или нет!!! Как оказалось да!!!
Вообщем спасибо!!!
Если хочешь спросить как изменить указателем внешнюю или внутренюю переменную, то так и спрашуй. С точки зрения программирования относительно твоих фрагментов кода (а оба они верны, тока для разных случаев), говорить что первый способ неверен - НЕПРАВИЛЬНО. Он неверен только для твоей задачи конкретно
Если хочешь спросить как изменить указателем внешнюю или внутренюю переменную, то так и спрашуй. С точки зрения программирования относительно твоих фрагментов кода (а оба они верны, тока для разных случаев), говорить что первый способ неверен - НЕПРАВИЛЬНО. Он неверен только для твоей задачи конкретно
Вообщето я не об этом спрашивал, ты ввел себя в заблуждение!!!!
А вообщем ты гонишь!!!! Доказывать тебе ничего не буду!! Но когда читаешь сообщение, вдумайся, то что ты мне написал, совсем не относиться к моему вопросы!!! Так что думай!!!
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах