вопрос для тех, кто знает. PHP documentation (для php5) четко заявляет, что вы не передаете объекты по ссылкам в php, потому что для метода, который принимает объект, фактически переданное значение является «идентификатором объекта, который позволяет объектным аксессуарам находить фактический объект», , Вопрос в том, что происходит, когда вы на самом деле do сделать это?Что происходит, когда вы передаете объект по ссылке, в php, под капотом?
Рассмотрим следующий код:
<?php
function foo(&$arg){
if(is_array($arg)){
print $arg['foo'];
}
if(is_object($arg)){
print $arg->{'foo'};
}
}
$o1 = new \stdClass;
$o1->foo = 'bar';
$a1 = ['foo'=>'bar'];
print sprintf("O1 foo: %s", foo($o1));
print sprintf("a1 foo: %s", foo($a1));
Это правильно выводит:
o1 foo: bar
a1 foo: bar
Возникает вопрос: почему? Может ли кто-нибудь описать, что происходит с этой ссылкой идентификатора объекта, которая все еще позволяет получить доступ к фактическому объекту?
'why'. И почему бы нет? –