Note that even though isset/empty works on classes implementing ArrayAccess, array_key_exists does not. At least not in PHP 5.3.
(PHP 5, PHP 7, PHP 8)
ArrayAccess::offsetExists — Bir konumun mevcut olup olmadığına bakar
Bir konumun mevcut olup olmadığına bakar.
ArrayAccess arayüzünü gerçekleyen nesneler üzerinde isset() veya empty() kullanıldığında bu yöntem çalıştırılır.
Bilginize:
empty() işlevi kullanıldığında ArrayAccess::offsetGet() çağrılır ve sadece dönen değer
true
olduğu takdirde konumun boş olup olmadığına bakılır.
offset
Varlığı sınanacak konum.
Başarı durumunda true
, başarısızlık durumunda false
döner.
Bilginize:
Dönüş değeri bool türünde değilse tür dönüşümü yapıldıktan sonra döndürülür.
Örnek 1 - ArrayAccess::offsetExists() örneği
<?php
class Sınıf implements ArrayAccess {
public function offsetSet($konum, $değer): void {
var_dump(__METHOD__);
}
public function offsetExists($var): bool {
var_dump(__METHOD__);
if ($var == "filanca") {
return true;
}
return false;
}
public function offsetUnset($var): void {
var_dump(__METHOD__);
}
#[\ReturnTypeWillChange]
public function offsetGet($var) {
var_dump(__METHOD__);
return "değer";
}
}
$nesne = new Sınıf;
echo "Sınıf::offsetExists() çalışır\n";
var_dump(isset($nesne["filanca"]));
echo "\nSınıf::offsetExists() ve Sınıf::offsetGet() çalışır\n";
var_dump(empty($nesne["filanca"]));
echo "\nSınıf::offsetExists() çalışır, alınacak bir şey olmadığından Sınıf::offsetGet() çalışmaz\n";
var_dump(empty($nesne["falanca"]));
?>
Yukarıdaki örnek şuna benzer bir çıktı üretir:
Sınıf::offsetExists() çalışır string(21) "Sınıf::offsetExists" bool(true) Sınıf::offsetExists() ve Sınıf::offsetGet() çalışır string(21) "Sınıf::offsetExists" string(18) "Sınıf::offsetGet" bool(false) Sınıf::offsetExists() çalışır, alınacak bir şey olmadığından Sınıf::offsetGet() çalışmaz string(21) "Sınıf::offsetExists" bool(true)
Note that even though isset/empty works on classes implementing ArrayAccess, array_key_exists does not. At least not in PHP 5.3.
It seems that in PHP 7, if this method returns FALSE then offsetGet() will return NULL (in PHP 5, offsetGet() didn't first check what value offsetExists() returned). So if your code suddenly stops working when you upgrade to PHP 7 make sure that offsetExists() returns a sensible value!
If you care about key-strictness, you may need to use an alternative solution (maybe overriding offsetExists() in subclass(es)). So, offsetExists() acts like array_key_exists() and does not handle the key types. Here;
<?php
$array = ['one', 'two', 3.=>'boom!'];
$arrayObject = new ArrayObject($array);
$key = '3';
var_dump(array_key_exists($key, $array)); // bool(true)
var_dump(in_array($key, array_keys($array), true)); // bool(false)
var_dump($arrayObject->offsetExists($key)); // bool(true)
var_dump(in_array($key, array_keys($arrayObject->getArrayCopy()), true)); // bool(false)
// @override;
public function offsetExists($key)
{
// make a strict check
return in_array($key, array_keys($this->getArrayCopy()), true);
}
?>