[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Сравнивание обьектов
fallow
Почему когда я пытаюсь сравнить обьекты оператором эквивалента возвращает false?

//сравниваем обьекты
class Comparison{
var $variable1;
var $varibale2;

function hi(){
echo 'Hello!';
}
}

$o1 = new Comparison;
$o2 = new Comparison;

if ($o1 === $o2): echo 'Objects alike <br />!'; else: echo 'Object not alike <br />'; endif;


Если почитать это здесь сравнение обьектов
То белым по чёрному написанно что 2 обьекта одних и тех же классов равны.
А мне выдает false... если даже их код запустить то тоже false, а если вместо эквивалента поставить простое сравнивание (==) то выдает true. Это у них опечатка или что?

И ещё написанно что : Два объекта равны, если они имеют те же самые свойства и значения, а также являются экземплярами одного и того же класса.

Ну они ведь всегда будут иметь те же свойства и значения если будут экзеплярами одного и того же класса? или нет..



Спустя 44 минуты, 43 секунды (5.01.2011 - 03:11) waldicom написал(а):
Это же два разных объекта, с чего они будут равны?
Вот если бы они указывали на один и тот же экземпляр, то да.
Попробуйте так:
$o1 = new Comparison;
$o2 = $o1;

Спустя 37 минут, 30 секунд (5.01.2011 - 03:48) fallow написал(а):
Цитата (waldicom @ 5.01.2011 - 00:11)
Вот если бы они указывали на один и тот же экземпляр, то да.

Почему разные?
Ведь внутри всё одинаковое.
Экземпляр класса это ведь и есть обьект?
Т.е получается вы говорите что - "если бы эти обьекты указывали на эти же обьекты то да"?
Или я что-то неправильно понял?
Ну как мне на сайте обьяснили так я и понял.

И ещё вопрос :
Что-то не понял я что такое дестркуторы, и зачем они нужны.
Вот код, хотел понять деструкторы но так и не понял...

class Plus{
var $var1 = 'Hello!';

function __construct(){
echo 'Hello I am base constructor';
}


function __destruct(){
$this->var1;
}


}

class Minus extends Plus{
function __construct(){
parent::__destruct();
echo $this->var1;
}
}

$obj = new Minus();


Думал что если сначала вызову деструктор в котором я прописал свойство var1 которое думал удалится, а потом
попробую вывести свойство var1 и ничего не выйдет, то я ошибся, всё прекрасно выводит, так что же он делает(деструктор)?

Спустя 5 часов, 22 минуты, 46 секунд (5.01.2011 - 09:11) Michael написал(а):
по твоей ссылке - там же написано для php 4.
объекты имеют ссылочный тип. Т.е. переменная указывает на участок памяти где лежит объект. Объекты внутренне схожие, но лежат то в разных участках памяти(===).

Если в конструкторе сделал что то дополнительное, типа открыл файл, то в деструкторе закрой этот файл.

Спустя 3 часа, 24 минуты, 57 секунд (5.01.2011 - 12:36) vasa_c написал(а):
Цитата
а если вместо эквивалента поставить простое сравнивание (==) то выдает true.

Ну, так равны значит.
Но не эквивалентны.

Спустя 7 минут, 32 секунды (5.01.2011 - 12:43) sixpoundeeer написал(а):
Деструкторы нужны для выполнения завершающих действий с объектом. Перед разрушением объекта запускается метод __desctruct, если он имеется и выполняются все операторы, которые в нем содержаться. Короче то же, что __construct, только при разрушении, а не при создании объекта.

Спустя 6 дней, 1 час, 13 минут, 22 секунды (11.01.2011 - 13:57) linker написал(а):
Как вариант сравнения объектов одного класса
class A
{
protected $a = 'a';
public function __toString() { return $this->a; }
}


class B extends A
{
protected $a = 'b';
}

$a = new A();
$b = new B();
echo ((string)$a == (string)$b) ? 'Объекты равны' : 'Объекты не равны';
тут можно кучу вариантов придумать, все зависит от задачи.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.