Вопрос-Ответ по ООП PHP

Печать RSS
2628

П

Пацак
0
Я не зря поставил кавычки. smile Просто писать как-нибудь так function func($argument, &$return1, &$return2) и "внутри" присваивать этим переменным нужные значения. Массив занимает больше места и его использование может быть неудобным (в preg_match, к примеру).

2000 лет д.н.э.
0
130. .::lugaro::., как бэ движемся к ооп интерфейсу, это все само отпадет со временем,конкретно твои примеры были обозначены как
"" Возврат по ссылке вызовет ошибку
И
1 <?php $foo =& new StdClass(); ?>
и
1 <?php function &foo ?>
теперь вызовут ошибку уровня E_STRICT.""
А

Оранжевые штаны
0
Использование ссылок следует из самого понятия переменной. Переменная в любом ЯП является ссылкой на область памяти, при чем примитивные типы (string, int, bool) автоматически передаются по значению, то есть при присвоении одной ссылки другой (одной переменной другой $x = $y) область памяти по адрему первой ссылки ($y) копируется и ссылка на нее передается во вторую ссылку ($x). При передаче сложных структур (obj, array) копировать память становится накладно и они передаются по ссылке без автоматического копирования. Так вот механизм ссылки позволяет присваивать элементарные типы без использования механизма автоматического копирования. Обастью применения может служить, к примеру, программа, одна из функций которой призвана получить в качестве аргумента ссылку на элементарный тип данных. Ну и так дальше
K

Транклюкаторщик
0
133. Bashka, это все хорошо, а может кто - нибудь реальный пример привести, в котором оправдывалось бы все это дело с практической стороны.
П

Пацак
0
132. ramzes, ссылки используются не только в ООП, а & нельзя будет использовать лишь по отношению к объектам (а они передаются по ссылке и без &). Конечно, иногда функции без ссылок неудобны (если мне нужна и "повернутая" и "расстрелянная" переменная одновременно), но часто это действительно неудобно.
133. Bashka, где это string элементарный тип? Это же по сути массив символов. А где-то и int и char объекты. Тема про php вообще-то)
Изменил: Петр (29.07.2011 / 17:53)
А

Оранжевые штаны
0
У меня был такой вот случай. Есть объект, в методе которого происходит перебор одного ассоциативного массива, имена элементов этого массива соответствуют именам свойств объекта, так вот свойства объекта с данными именами необходимо было передать по ссылке в переменную, то есть чтобы некоторая переменная ссылалась на свойства объекта, имена которых соотвествуют имени текущего элемента массива в переборе, решил так:
$a = &$this->$key;

Bashka, где это string элементарный тип? Это же по сути массив символов.
И не смотря на это, string это элементарный тип данных

А где-то и int и char объекты. Тема про php вообще-то)
Так и я о php
Изменил: Артур (29.07.2011 / 18:00)
П

Пацак
0
134. eGo, я ж уже написал - preg_match. Третий параметр - ссылка. Если бы функция возвращала массив, то код выглядел бы так - $arr=preg_match(...); if($arr[0]){ print_r($arr[1]); } А так можно проще - if(preg_match(... $arr)){ print_r($arr); }
Изменил: Петр (29.07.2011 / 18:06)
А

Оранжевые штаны
0
П

Пацак
0
136. Bashka, и где, интересно, string элементарный тип, а array нет? В php и то, и то копируется по значению - т.е. "элементарные".
Изменил: Петр (29.07.2011 / 18:23)
А

Оранжевые штаны
0
На сколько мне известно элементарность типа определяется не способом его передачи, а умозаключениями разработчиков языка. Несколько манов убедили меня что string элементарен, а array нет. Могу конечно ошибаться.

Вобщем то говоря, сути моего поста не меняет ) некоторые типы передаются автоматически с копированием памяти, чтобы этого избежать используется ссылка
Изменил: Артур (29.07.2011 / 18:31)
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск