Передать объекта параметром в метод в PHP5! С сылкой или без? Разница?

satanistlav

Новичок
Передать объекта параметром в метод в PHP5! С сылкой или без? Разница?

Подскажите, пожалуйста, какая разница между передачей объекта в параметр ссылкой и без?
Разьве объекты в php5 не передаются уже ссылкой?

На примере, Какая разница между этими 2-мя конструкторами?

PHP:
class foo {
    public function __construct(foo2 $foo2)
    {
    	
    }
    
}
PHP:
class foo {
    public function __construct(foo2 &$foo2)
    {
    	
    }
    
}
 

zerkms

TDD infected
Команда форума
разницы никакой
проверяется var_dump'ом без задавания глупых вопросов на форуме
 

satanistlav

Новичок
Автор оригинала: zerkms
разницы никакой
проверяется var_dump'ом без задавания глупых вопросов на форуме
ты что самый умный тут?

Вот тебе пример var_dump! А теперь есть разница?

PHP:
class foo {
    public function __construct(foo2 $foo2)
    {
    	$foo2 = new foo2();
    	$foo2->_var = 'Another var';
    }
    
}

class foo2 {
    
    public  $_var;
    public function __construct()
    {
    	;
    }
    
}

$foo2 = new foo2();
$foo2->_var = 'Some var';
var_dump($foo2);

new foo($foo2);

var_dump($foo2);
 

Андрейка

Senior pomidor developer
Разьве объекты в php5 не передаются уже ссылкой?
интересный способ постановки вопроса.. как будто нам чета доказываешь)

ну т.к. некий "объект" особо от других переменных не отличается, то разница между 1 и вторым случаем оч большая)
 

satanistlav

Новичок
Автор оригинала: Андрейка
Разьве объекты в php5 не передаются уже ссылкой?
интересный способ постановки вопроса.. как будто нам чета доказываешь)

ну т.к. некий "объект" особо от других переменных не отличается, то разница между 1 и вторым случаем оч большая)
Я никому ничего нехочу доказывать! Появилась проблема! И мне кажется, что "Объекты в Php5 передаются ссылкой" не совсем правильно
 

zerkms

TDD infected
Команда форума
PHP:
<?php
    
class a {
    public function __construct(foo2 $foo2)
    {
        var_dump($foo2);
    }
    
}



class b {
    public function __construct(foo2 &$foo2)
    {
        var_dump($foo2);
    }
    
}

class foo2 {}

$foo2 = new foo2();

new a($foo2);
new b($foo2);
самое время включать моск

-~{}~ 16.12.07 23:22:

И мне кажется, что "Объекты в Php5 передаются ссылкой" не совсем правильно
озвучивай, почему неправильно, и как было бы правильно?
 

Андрейка

Senior pomidor developer
satanistlav
Появилась проблема!
какая у тебя проблема?

"Объекты в Php5 передаются ссылкой" не совсем правильно
я фразу про передаются ссылкой не произносил, доказывать мне, что она неправильная бесполезно)
 

satanistlav

Новичок
А если так?
PHP:
class a {
    public function __construct(foo2 $foo2)
    {
       $foo2 = null;
    }
    
}



class b {
    public function __construct(foo2 &$foo2)
    {
        $foo2 = null;
    }
    
}

class foo2 {}

$foo2 = new foo2();

new a($foo2);
var_dump($foo2);
new b($foo2); 
var_dump($foo2);
 

satanistlav

Новичок
Автор оригинала: Андрейка
satanistlav
Появилась проблема!
какая у тебя проблема?

"Объекты в Php5 передаются ссылкой" не совсем правильно
я фразу про передаются ссылкой не произносил, доказывать мне, что она неправильная бесполезно)
Это не ты! Это в Php manual написано, насколько я помню!

-~{}~ 16.12.07 16:27:

Автор оригинала: Андрейка
zerkms
а в чем мораль твоего примера?
Мораль в том, что объекты и "не совсем" по ссылке и передаются!
 

Андрейка

Senior pomidor developer
satanistlav
ну там точно не написано Php в таком виде => не цитата.. ссылку на мануал, который ты помнишь, плиз
 

satanistlav

Новичок
http://www.php.net/manual/en/language.oop5.basic.php

When assigning an already created instance of a class to a new variable, the new variable will access the same instance as the object that was assigned. This behaviour is the same when passing instances to a function. A copy of an already created object can be made by cloning it.

Сдесь слово ссылка правда не указана, но мораль думаю одна!
 

Андрейка

Senior pomidor developer
satanistlav
и что? по английски написано, что передается the same instance - она и передается.. или в этом есть сомнения? причем тут ссылки то?
 

satanistlav

Новичок
При изменении объекта она должна меняться везде если the same instance! в моем последнем примере если мы сделаем переменную assign to null то значение переменной вне контекста не меняется!
 

Андрейка

Senior pomidor developer
satanistlav
а где в $foo2 = null; изменение объекта происходит? это изменение переменной
 

satanistlav

Новичок
Как я понимаю, same instance это значит, что для хранения этого объекта используется одно место, то есть нет 2 копий этого объекта, так же как и при reference!
Мой вопрос в этом состоял! Какая разница между "same instance" и reference?
 

Андрейка

Senior pomidor developer
ну на пальцах объяснять прийдется..
хотя.... а в чем разница между
$a = $b и $a = &$b если учесть, что в обоих случаях "хранения используется одно место" ?
 

satanistlav

Новичок
Здесь не используется одно место! В втором да, $b это ссылка на место хранения $a! В 1ом это 2 места для хранения значений переменных каждого!
Что дальше?

-~{}~ 16.12.07 17:24:

и при
PHP:
$b = 2;
function foo($a) {
    // Сдесь переданная переменная копируется
   // а если $a это объект то переменная не копируется а передается как то! Если не ссылкой то как?
  // 
}
-~{}~ 16.12.07 17:29:

Мне кажется мой вопрос не поняли! Или же я не смог объяснить!
Так что, распрягли мозг! Оффтоп
 
Сверху