Quantcast
Channel: PHP8タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 521

EthnaをPHP8にしたときのメモ

$
0
0
開発環境 Ethna PHP 5.4 Docker(イメージ:php:8.0-rc-apache) 発生したエラーと修正ポイント PHP7までは非推奨だったものの、PHP8で廃止になった関数に対する対処がメインとなります。 \$array{\$i} =& new function クラス名(){} // コンストラクタ count(null) preg_replace(\$search."e", \$replace, \$subject) mysql* mcrypt* Array and string offset access syntax with curly braces is no longer supported 波括弧で文字列・配列にアクセス不可。 PHP 8.0.0 より前のバージョンでは、 配列の要素にアクセスするときに、 角括弧と波括弧がどちらも同じ意味で使えていました。 (つまり、この例で \$array[42] と \$array{42} は同じものを表しているということです)。 波括弧で配列にアクセスする文法は、 PHP 7.4.0 以降は非推奨になり、 PHP 8.0.0 以降はサポートされなくなっています。 (引用元:https://www.php.net/manual/ja/language.types.array.php) 修正:\$string{\$i} を \$string[\$i] に置換。 syntax error, unexpected token "new" 新しいオブジェクトを参照渡しで代入不可。 (参考:https://www.php.net/manual/ja/migration70.incompatible.php) 修正:「= *& *new」で「= new」にgrep置換 is not compatible with method 互換性のないオーバーライドした関数 修正:引数、デフォルト値、型宣言を合わせる。 Call to a member function getPlugin() on null コンストラクタで初期化されるはずの変数がnullになっていた模様。 PHP 8.0.0 より前のバージョンでは、グローバル名前空間にあるクラスは、 クラス名と同じ名前のメソッドが古いスタイルのコンストラクタとして解釈されます。 (引用元:https://www.php.net/manual/ja/language.oop5.decon.php) 修正(各クラス):function Ethna_Controller() ⇒ function __construct() Non-static method Ethna_Controller::main() cannot be called statically in static でないメソッドを静的にコールすると、Error がスローされます。 PHP 8.0.0 より前のバージョンでは、 static でないメソッドを静的にコールすることが非推奨になっており、 E_DEPRECATED レベルの警告が発生していました。 (引用元:https://www.php.net/manual/ja/language.oop5.static.php) 修正:\$thisを使用していないものはstatic。getInstanceもstatic。\$thisを使用している場合は呼出をnewする。 Uncaught TypeError: count(): Argument #1 ($var) must be of type Countable|array, string given in 8.0.0 value パラメータに不正な型を渡した場合に、 TypeError をスローするようになりました。 7.2.0 value パラメータに不正な型を渡した場合に、 警告を発生させるようになりました。 https://www.php.net/manual/ja/function.count.php 修正:処理に応じて、countに渡す変数の型チェック、nullチェック、もしくはstring等⇒arrayにする。 preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead 修正:e修飾子を削除し、preg_replace_callback に変更。および、create_functionを通常のfunction(){}形式に修正。 mysql*系の関数が無くなったのでmysqli*に対応 参考:https://tohokuaiki.hateblo.jp/entry/2017/09/20/%E4%BB%8A%E6%9B%B4%E3%81%A0%E3%81%91%E3%81%A9%E3%80%81Ethna%E3%82%92mysqli%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%9F%E6%99%82%E3%81%AE%E3%83%A1%E3%83%A2 DB/Ethna_DB_PEAR.php <?php function getInsertId() { if ($this->isValid() == false) { return null; } else if ($this->type == 'mysql') { return mysql_insert_id($this->db->connection); } else if ($this->type == 'mysqli') { # 追加 return mysqli_insert_id($this->db->connection); # 追加 } else if ($this->type == 'sqlite') { /* mysqli_connectはresourceではなく、Objectなので */ function isValid() { if (is_null($this->db) || (is_object($this->db->connection) == false && # 追加 is_resource($this->db->connection) == false)) { function quoteIdentifier($identifier) { /** 中略 **/ switch ($this->type) { case 'mysql': case 'mysqli': # 追加 $ret = '`' . $identifier . '`'; break; function &getMetaData($table) { /** 中略 **/ switch ($this->type) { case 'mysql': case 'mysqli': # 追加 その他 mcrypt_encryptは PHP 7.1.0 で 非推奨となり、PHP 7.2.0 で削除 されました。この関数に頼らないことを強く推奨します。 (引用元:https://www.php.net/manual/ja/function.mcrypt-encrypt.php) 未対応

Viewing all articles
Browse latest Browse all 521

Trending Articles