offset = $offset; // Quick validation if ($size < 0) throw new \Exception(sprintf('Atom cannot be negative. (%d)',$size)); $this->size = $size; $this->filename = $filename; $this->cache = collect(); } public function __get(string $key): mixed { switch ($key) { // Create time is in the MOOV/MVHD atom case 'creation_date': case 'duration': case 'preferred_rate': case 'preferred_volume': $subatom = $this->find_atoms(mvhd::class,1); return $subatom->{$key}; // Height is in the moov/trak/tkhd atom case 'height': // Width is in the moov/trak/tkhd atom case 'width': $atom = $this->find_atoms(trak::class); return $atom->map(fn($item)=>$item->{$key}) ->filter() ->max(); // We need to pass our file handle requests to our parent case 'fh': return parent::__get($key); default: throw new \Exception('Unknown key: '.$key); } } }