Pull to refresh
5
0
Г.О.@gro

User

Send message
Пардон, в выражении "$a = new stdClass()" ничего никуда не передается. В нем создается структура объекта в памяти, создается значение переменной, ссылающееся на нее и создается имя переменной в данном контектсе, ссылающееся на значение переменной, ссылающейся на структуру в памяти.
Передается переменная. Значение переменной. Которое является ссылкой. Объект не передается никуда. Объект лежит себе где-то в памяти и ему глубоко все равно, какие переменные на него ссылаются в каких количествах и куда эти самые переменные передаются.
Это уже вопрос терминологии. Все-таки в PHP под "передачей по ссылке", обычно понимают передачу имени переменной. И "передача объекта по ссылке" многих вводит в заблуждение в понимании механизмов. Одно из различий м/у двумя этими понятиями я указал — различное поведение при записи нового значения в переменную. Для многих это становится неожиданностью.
Отнюдь. Это значит, что передается по значению ссылка на объект. Изменение содержимого объекта затрагивает и глобальную переменную, т.к. она ссылается на ту же структуру в памяти, что и локальная. Однако, заменить для переменной один объект на другой не возможно, как я показал выше.
Переменные, содержащие объекты передаются по значению, но этим значением является ссылка. Передача же по ссылке (с &) означает передачу по ссылке самой переменной (имени переменной). Может я сейчас несколько напутал с терминами, но вот пример:
function func(x) {
x = 1;
}
obj = new Class();
func(obj); // С самой переменной obj ничего не произошло.
func(&obj); // А теперь в ней единица.
хм. Хабр убил все после знака меньше:
$n = abs($n) % 100;
if ($n >= 5 && $n меньше или равно 20) return $form5;
$n = $n % 10;
Не сочтите за придирки, быстрее так имхо:
$n = abs($n) % 100;
if ($n >= 5 && $n
Так же было бы удобно иметь возможность хранить склонения одного слова в отдельном массиве и передавать его:
$let = Array('письмо', 'письма', 'писем');
plural(3, $let);
Обработка тонны require_once и include_once
Решение "влоб" нашлось само собой

А решение не в лоб, а в глаз — использовать автоподгрузку (в общем случае __autoload).
Передача переменной по ссылке (например $a=1; call_func(&$a)) - не влияет на быстродействие. Передача массивов по ссылке - влияет чуть-чуть. Передача классов - влияет очень.

Видимо все-таки передача объектов, а не классов. А есть результаты тестов подтверждающих это? В PHP5 переменные-объекты являются ссылками на структуры в памяти, так что передача по значению не может тормозить. Непонятно так же почему в PHP4 передача объектов "тормознее" передачи массивов. У меня воспроизвести это не получилось.
Ну и конечно это имеет смысл только если сами передаваемые массивы/объекты не изменяются внутри функции, так как задействуется механизм отложенного копирования.
PHP не парсер, PHP транслирующий интерпретатор. Тем более не понятно какая разница, что разбирать, набор классов или набор функций. Тем более, что при ООП на крупных проектах объем кода обычно меньше.
ООП в PHP уместен там, где оно уместно в любом другом императивном языке программирования. Уместность ООП для решения какой-то задачи обычно мало зависит от ЯП.
Если для вас веб-программирование — муха, то, видимо, вы не ушли много дальше гостевой книги.
12 ...
51

Information

Rating
Does not participate
Location
Санкт-Петербург и область, Россия
Registered
Activity