Since PHP 5.5.X foreach can accept non scalar items. So the return can be anything ;)(PHP 5, PHP 7, PHP 8)
Iterator::key — O anki elemanın anahtarını döndürür
Bu işlevin bağımsız değişkeni yoktur.
   Başarı durumunda scalar türünde bir değer, aksi takdirde
   null döner.
  
   Başarısızlık durumunda bir E_NOTICE çıktılanır.
  
Since PHP 5.5.X foreach can accept non scalar items. So the return can be anything ;)And converts everything to integer except string, so in php the post process could be:
    public function key() {
        $yourKey = $this->createYourKey();
        if (is_object($yourKey) || is_array($yourKey))
            throw new Exception('Array and Object not allowed.');
        elseif (is_string($yourKey))
            return $yourKey;
        else
            return (int) $yourKey;
    }This function may return any type, not just scalar, for some Iterator types. In particular, it is very trivial to write a generator function that yields arbitrary keys:
<?php
function foo() {
  yield null => 1;
  yield new stdclass => 2;
}
?>