2012-08-16 20 views
11

Các tài liệu PHP không phải là rất rõ ràng và chỉ nói rằng:Sự khác nhau giữa SplObjectStorage :: chứa và SplObjectStorage :: offsetExists là gì?

SplObjectStorage :: offsetExistsKiểm tra xem một đối tượng tồn tại trong lưu trữ. (PHP> = 5.3.0)

SplObjectStorage :: chứaKiểm tra nếu lưu trữ chứa các đối tượng được cung cấp. (PHP> = 5.1.0)

Điều đó có vẻ tương tự với tôi.

CÂU HỎI: Ngoài chênh lệchViệc chỉ có sẵn trong 5.3.0, chênh lệch giữa 2 là gì?


thử nghiệm nhỏ tôi đã tiến hành ...

$s = new SplObjectStorage(); 
$o1 = new StdClass(); 
$o2 = new StdClass(); 
$o3 = "I'm not an object!"; 
$s->attach($o1); 

var_dump($s->contains($o1)); 
var_dump($s->offsetExists($o1)); 
echo '<br>'; 
var_dump($s->contains($o2)); 
var_dump($s->offsetExists($o2)); 
echo '<br>'; 
var_dump($s->contains($o3)); 
var_dump($s->offsetExists($o3)); 

đầu ra:

boolean true 
boolean true 

boolean false 
boolean false 

Warning: SplObjectStorage::contains() expects parameter 1 to be object, string given in index.php on line 15 
null 

Warning: SplObjectStorage::offsetExists() expects parameter 1 to be object, string given in index.php on line 16 
null 

Trả lời

12

Cả hai đều giống hệt nhau.

offsetExists được định nghĩa là một phương pháp bí danh của contains và được bao gồm đơn giản cho phù hợp với giao diện ArrayAccess.

Bạn có thể see for yourself in the source rằng SPL_MA (bí danh phương pháp) đang được sử dụng và cũng có một số bí danh khác được thiết lập.

  • offsetExists = chứa
  • offsetSet = đính kèm
  • offsetUnset = tách
+0

Cám ơn lặn vào nguồn. – PeeHaa

+0

Tuyệt vời, cảm ơn rất nhiều! – Tivie

Các vấn đề liên quan