MeWrite Docs

PHP Deprecated: Function is deprecated

PHPで非推奨の関数を使用した場合に発生する警告

概要

PHP Deprecated は、将来のPHPバージョンで削除される予定の非推奨機能を使用している場合に発生する警告です。現在は動作しますが、アップグレード時に問題になります。

エラーメッセージ

PHP Deprecated: Function utf8_encode() is deprecated in /path/to/file.php on line 10
PHP Deprecated: Implicit conversion from float to int loses precision in /path/to/file.php on line 15
PHP Deprecated: Creation of dynamic property Foo::$bar is deprecated in /path/to/file.php on line 20

よくある非推奨機能と代替

1. utf8_encode / utf8_decode(PHP 8.2+)

1
2
3
4
5
6
7
// NG
$utf8 = utf8_encode($latin1);
$latin1 = utf8_decode($utf8);

// OK
$utf8 = mb_convert_encoding($latin1, 'UTF-8', 'ISO-8859-1');
$latin1 = mb_convert_encoding($utf8, 'ISO-8859-1', 'UTF-8');

2. 動的プロパティ(PHP 8.2+)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
// NG
class Foo {}
$foo = new Foo();
$foo->bar = 'value'; // 動的プロパティ

// OK: プロパティを定義
class Foo {
    public string $bar;
}

// OK: #[AllowDynamicProperties]を使用
#[AllowDynamicProperties]
class Foo {}

3. ${} 文字列展開(PHP 8.2+)

1
2
3
4
5
6
7
8
// NG
$name = 'foo';
echo "Hello ${name}";
echo "Hello ${$name}";

// OK
echo "Hello {$name}";
echo "Hello {$$name}";

4. mysql_* 関数(PHP 7.0で削除)

1
2
3
4
5
6
7
8
// NG(PHP 5.5で非推奨、7.0で削除)
$conn = mysql_connect('localhost', 'user', 'pass');

// OK: mysqli
$conn = mysqli_connect('localhost', 'user', 'pass', 'database');

// OK: PDO
$pdo = new PDO('mysql:host=localhost;dbname=database', 'user', 'pass');

5. each() 関数(PHP 7.2で非推奨)

1
2
3
4
5
6
7
8
9
// NG
while (list($key, $value) = each($array)) {
    echo "$key: $value";
}

// OK
foreach ($array as $key => $value) {
    echo "$key: $value";
}

6. create_function(PHP 7.2で非推奨)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
// NG
$func = create_function('$a, $b', 'return $a + $b;');

// OK: 無名関数
$func = function($a, $b) {
    return $a + $b;
};

// OK: アロー関数(PHP 7.4+)
$func = fn($a, $b) => $a + $b;

7. Nullable引数のデフォルト値(PHP 8.4+)

1
2
3
4
5
// NG: 暗黙のnullable
function foo(string $param = null) {}

// OK: 明示的なnullable
function foo(?string $param = null) {}

警告の抑制(非推奨)

1
2
3
4
5
// 一時的な対処(推奨しない)
error_reporting(E_ALL & ~E_DEPRECATED);

// または
@deprecated_function();

PHPバージョン移行ツール

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
# PHP_CodeSniffer + PHPCompatibility
composer require --dev squizlabs/php_codesniffer
composer require --dev phpcompatibility/php-compatibility

# チェック実行
vendor/bin/phpcs --standard=PHPCompatibility --runtime-set testVersion 8.2 src/

# Rector で自動修正
composer require rector/rector --dev
vendor/bin/rector process src

rector.phpの設定例

1
2
3
4
5
6
7
use Rector\Config\RectorConfig;
use Rector\Set\ValueObject\LevelSetList;

return static function (RectorConfig $rectorConfig): void {
    $rectorConfig->paths([__DIR__ . '/src']);
    $rectorConfig->sets([LevelSetList::UP_TO_PHP_82]);
};

関連エラー

関連エラー

PHP の他のエラー

最終更新: 2025-12-17