PHP 8.4.1 Released!

SplFileInfo::setInfoClass

(PHP 5 >= 5.1.2, PHP 7, PHP 8)

SplFileInfo::setInfoClassSplFileInfo::getFileInfo() および SplFileInfo::getPathInfo() で使用するクラスを設定する

説明

public SplFileInfo::setInfoClass(string $class = SplFileInfo::class): void

このメソッドで、 SplFileInfo::getFileInfo() および SplFileInfo::getPathInfo() がコールされた際に使用するカスタムクラスを設定します。 このメソッドに渡すクラス名は、SplFileInfo あるいはその派生クラスのものでなければいけません。

パラメータ

class

SplFileInfo::getFileInfo() および SplFileInfo::getPathInfo() がコールされた際に使用するクラス名。

戻り値

値を返しません。

例1 SplFileInfo::setFileClass() の例

<?php
// SplFileInfo を継承したクラスを定義します
class MyFoo extends SplFileInfo {}

$info = new SplFileInfo('foo');
// 使用するクラス名を設定します
$info->setInfoClass('MyFoo');
var_dump($info->getFileInfo());
?>

上の例の出力は、 たとえば以下のようになります。

object(MyFoo)#2 (0) { }

参考

add a note

User Contributed Notes 1 note

up
-1
Eugene Kunkel
5 years ago
Be careful when using this method, as the functionality isn't exactly the same as instantiating the extending class directly. This can really trip you up if you're using type hints or instanceof checks.

<?php

class CustomFileInfo extends SplFileInfo
{
public function
getExtension()
{
$ext = strtolower(parent::getExtension());

return
'jpeg' === $ext ? 'jpg' : $ext;
}
}

$path = __DIR__ . '/foobar.jpeg';

$good = new CustomFileInfo($path);

echo
"<pre>";
var_dump($good instanceof SplFileInfo);
var_dump($good instanceof CustomFileInfo);

$bad = new SplFileInfo($path);
$bad->setInfoClass('CustomFileInfo');

var_dump($bad instanceof SplFileInfo);
var_dump($bad instanceof CustomFileInfo);
echo
"</pre>";

?>

Outputs:

bool(true)
bool(true)
bool(true)
bool(false)
To Top