Форум Фотогалерея Деловой мир Мелитополя
Мелитополь
Мелитопольский форум
 
 RSS  FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 

На счет ссылок!!!!

 
Начать новую тему   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Мелитополь -> Программирование
Предыдущая тема :: Следующая тема  
Автор Сообщение
colambina

Прохожий


Пол: Пол: Оно
Зарегистрирован: 18.02.2007
Сообщения: 30

Репутация: 4.5

СообщениеДобавлено: Чт Мар 01, 2007 09:02 am    Заголовок сообщения: На счет ссылок!!!! Ответить с цитатой

Всем привет!!!!
У меня есть маленький вопрос!!
есть метод класса ...
function method($db){
$this->db=&$db;
}

function method(&$db){
$this->db=$db;
}

Какой из этих методов более верен!!!
Просто во втором случаи, как мне кажется я передаю ссылку, а во втором случае я передаю сам обьект, и вотом в методе можно его изменять!!
Это так чисто интерес!! То есть чтобы код выглядел более правильно и красиво!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Чт Мар 01, 2007 10:23 am    Заголовок сообщения: Ответить с цитатой

function method(&$db){
$this->db=$db;
}

Второй вариант правильней. Функция сразу будет получать указатель.
В первом же случае производится копирование переменной, а потом уже присвоение по указателю.

Кстати если ты используешь PHP5 а $db это обьект, то можно не ставить амперсанд, так как 5 работает с обьектами по ссылке.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
colambina

Прохожий


Пол: Пол: Оно
Зарегистрирован: 18.02.2007
Сообщения: 30

Репутация: 4.5

СообщениеДобавлено: Чт Мар 01, 2007 15:09 pm    Заголовок сообщения: Ответить с цитатой

Вообще я так и думал!! Просто хотел уточнить!!! Спасибо Thomas!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Чт Мар 01, 2007 15:25 pm    Заголовок сообщения: Ответить с цитатой

colambina писал(а):
Вообще я так и думал!! Просто хотел уточнить!!! Спасибо Thomas!!!

Пожалуйста. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
Serg_HD

Активист


Пол: Пол: Он
Зарегистрирован: 22.12.2004
Сообщения: 999
Откуда: Киев
Репутация: 251.6
голосов: 13

СообщениеДобавлено: Чт Мар 01, 2007 18:34 pm    Заголовок сообщения: Ответить с цитатой

А я чё-то вообще не пойму в чём вопрос-то заключается? Что значит "верный способ"? Оба способа верны! Если надо использовать указатель на переменную внутри самой функции, то это первый способ. Ты конкретно говори что хочешь получить. Если надо напрямую изменить переменную вне функции, то понятно что надо использовать амперсенд при входе (как заметил Томас) - иначе она будет использовать копию, так:
Код:

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, непонятно к чему это спрашивалось, самые азы всё-таки, не думаю что ты не мог бы написать в каком-нить редакторе свои функции и проверить...
Вернуться к началу
Посмотреть профиль Отправить личное сообщение   AIM Address
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Чт Мар 01, 2007 19:38 pm    Заголовок сообщения: Ответить с цитатой

Код:
function method1(&$d)
{
$this->$d=$d+5;
return $this->$d;
}
$n=10;
print method1($n);


return тут лишний.
А вообще правильно все спросил как по моему. Если будет видно что функция принимает указатель, то это будет понятней при повторном использовании чем догадываться что указатель скрыт внутри.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
Serg_HD

Активист


Пол: Пол: Он
Зарегистрирован: 22.12.2004
Сообщения: 999
Откуда: Киев
Репутация: 251.6
голосов: 13

СообщениеДобавлено: Чт Мар 01, 2007 19:45 pm    Заголовок сообщения: Ответить с цитатой

Всмысле лишний? Очень интересно. Я его там прописал, чтоб мне значение нужной переменной возвратилось при принте. И причём здесь понятно-непонятно? Если мне НАДО использовать указатели только в пределах одной функции (и НИГДЕ больше), что я уже неоднократно делал, то мне никаких указателей принимать не надо. Если мне их надо принимать, то принимаю при обращении к ней (функции).
Код:

function method($e)
{

$d=&$e;$d+=5;
return $d;
}
print method(5);   
//выведет 10

Или так тоже криво? Very Happy Всё зависит от поставленной задачи.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение   AIM Address
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Чт Мар 01, 2007 20:05 pm    Заголовок сообщения: Ответить с цитатой

Цитата:
Всмысле лишний? Очень интересно.

Цитата:

function method1(&$d)
{
$d+=5;
}
$n=10;
method1($this->id);
print $n;


вот так вот будет правильней иначе смысл ставить указатель ?

P/S/ Поставьте себе редакторы с autoindent code.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
Serg_HD

Активист


Пол: Пол: Он
Зарегистрирован: 22.12.2004
Сообщения: 999
Откуда: Киев
Репутация: 251.6
голосов: 13

СообщениеДобавлено: Чт Мар 01, 2007 20:09 pm    Заголовок сообщения: Ответить с цитатой

Thomas писал(а):
вот так вот будет правильней иначе смысл ставить указатель ?

Опять знакомая вода в ступе...Насчёт ретурна - всё там правильно (один из способов). Я написал (представь себе что у меня функция на 500 строк) для внутренней, чтобы было видно что первый вариант тоже катит как ни крути (только для другой задачи). Кстати, в твоём примере не понял где ты ссылаешься на $n (может вместо "$this->id" хотел вписать чтоб разница в значениях была налицо...)
Вернуться к началу
Посмотреть профиль Отправить личное сообщение   AIM Address
Thomas
В настоящее время запрещен

Бывалый


Пол: Пол: Он
Зарегистрирован: 29.03.2006
Сообщения: 3169
Откуда: /dev/null
Репутация: 138.5
голосов: 31

СообщениеДобавлено: Пт Мар 02, 2007 09:07 am    Заголовок сообщения: Ответить с цитатой

Код:

function method1(&$d)
 {
  $d+=5;
 }
$n=10;
method1($this->id);
print $this->id;

Да я запарился. Serg_HD пиши как знаешь. Человек по моему правильно спросил, если у него возник такой вопрос, то он ищет наиболее правильное решении и использование. У тебя же все способы верны. Wink
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ] Посетить сайт автора
colambina

Прохожий


Пол: Пол: Оно
Зарегистрирован: 18.02.2007
Сообщения: 30

Репутация: 4.5

СообщениеДобавлено: Пт Мар 02, 2007 10:06 am    Заголовок сообщения: Ответить с цитатой

Thomas не обращай на него внимание!!! Спасибо!!!! У меня просто был чисто интерес, можно даже так сказать согласиться со своими мыслями, то есть моя точка зрения была верна или нет!!! Как оказалось да!!!
Вообщем спасибо!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Serg_HD

Активист


Пол: Пол: Он
Зарегистрирован: 22.12.2004
Сообщения: 999
Откуда: Киев
Репутация: 251.6
голосов: 13

СообщениеДобавлено: Пт Мар 02, 2007 18:19 pm    Заголовок сообщения: Ответить с цитатой

Если хочешь спросить как изменить указателем внешнюю или внутренюю переменную, то так и спрашуй. С точки зрения программирования относительно твоих фрагментов кода (а оба они верны, тока для разных случаев), говорить что первый способ неверен - НЕПРАВИЛЬНО. Он неверен только для твоей задачи конкретно
Вернуться к началу
Посмотреть профиль Отправить личное сообщение   AIM Address
ReZak

Писатель


Пол: Пол: Оно
Зарегистрирован: 15.06.2006
Сообщения: 469

Репутация: 27.4

СообщениеДобавлено: Сб Мар 03, 2007 07:46 am    Заголовок сообщения: Ответить с цитатой

завелись Very Happy каждый прав по своему Smile
Вернуться к началу
Посмотреть профиль Отправить личное сообщение [ скрыт ]
colambina

Прохожий


Пол: Пол: Оно
Зарегистрирован: 18.02.2007
Сообщения: 30

Репутация: 4.5

СообщениеДобавлено: Сб Мар 03, 2007 11:40 am    Заголовок сообщения: Ответить с цитатой

Serg_HD писал(а):
Если хочешь спросить как изменить указателем внешнюю или внутренюю переменную, то так и спрашуй. С точки зрения программирования относительно твоих фрагментов кода (а оба они верны, тока для разных случаев), говорить что первый способ неверен - НЕПРАВИЛЬНО. Он неверен только для твоей задачи конкретно



Вообщето я не об этом спрашивал, ты ввел себя в заблуждение!!!!
А вообщем ты гонишь!!!! Доказывать тебе ничего не буду!! Но когда читаешь сообщение, вдумайся, то что ты мне написал, совсем не относиться к моему вопросы!!! Так что думай!!!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение  
Показать сообщения:   
Начать новую тему   Эта тема закрыта, вы не можете писать ответы и редактировать сообщения.    Список форумов Мелитополь -> Программирование Часовой пояс: GMT + 2
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Powered by phpBB © 2001, 2005 phpBB Group
Русская поддержка phpBB

Р: 523916

База отдыха «Белый парус» пгт Кирилловка Азовское море.

Рейтинг Мелитопольских сайтов на Melitopol.org Hosting by VivaNET