【PHP】関数呼び出しエラー対応~未定義(undefined function)、プライベートをグローバル呼び出し(private method 〇〇 from global scope)など
| 更新: 2024/03/12 | 2546文字
今回は、管理人がお仕事・プライベートでプログラム書いているときに当たった関数(function)呼び出しエラーについて、原因などをチェックします。おもに『Call to undefined function(未定義)』『Call to private method from global scope(プライベートをグローバル呼び出し)』『Uncaught Error: Class 〇〇 not found(そもそもクラスが無い)』などです。さっそく確認してみましょう。
目次
素でPHP書いてるときに当たったパターン(未定義,プライベートをグローバル呼び出し)
廃止function使う(ereg系など、undefined functionになる)
これは管理人が廃止functionとか調べてて、やってみたやつです。サーバー上のPHPはバージョン8になっていますが、ここで使っているereg系のファンクションってPHP 7になるタイミングで廃止になっています。ので、呼び出すと普通にエラー吐きます。
PHPマニュアルで新バージョンがリリースされた時は、下位互換性のない変更点などで確認できるので、廃止かどうかもチェックできるとよいです。 下記のリンク『削除された関数~ereg* 系のすべての関数』というところがソースです。
下位互換性のない変更点~PHP 5.6.x から PHP 7.0.x
https://www.php.net/manual/ja/migration70.incompatible.php
private functionなのにクラス外部から呼び出す(private method 〇〇 from global scope)
PHPのアクセス修飾子(public, private, protected)というのがあるんですけど、privateをクラス外から呼んでしまうと『private method 〇〇 from global scope』エラーになります。上記のコードは動作しません。
public functionにするか、publicなプロパティに代入するか、みたいな対応になりそうです。
アクセス権(phpマニュアル)
https://www.php.net/manual/ja/language.oop5.visibility.php
疑似変数$thisをつけないで、メソッド内で関数呼び出し(Call to undefined function)
んじゃ、『パブリックfunctionから呼び出せばいーじゃん』となりますが、上のコードはダメです(Call to undefined functionになります)。
対応としては疑似変数$thisをつかって『$this ->test_f();』のように書いてやると、内容がきちんと出力されるようになります。
WordPressなどのアプリケーション用テーマ・プラグインおよびライブラリなどで当たったパターン
管理人はメインのブログ用アプリケーションにWordPressを使っているので、WPテーマ,プラグイン絡みで当たることが多いです。しかし、他のアプリケーションやライブラリでもあたることがあるかもしれません。
(WordPress)外した親テーマの独自functionが残っていてCall to undefined function
管理人が、このサイトのグループサイトのSSFを調整していたときのエラーです。もともとSSFは既存の『Clarinaテーマ・親がllorix-one-lite』を改造して作っていたのですが、全部オリジナルのコードにするので、親テーマを解除しました。
そしたら、『親テーマが独自のfunctionを使っていたので読みだせずエラー』という状況に。こうにうのは、WP本体組み込みfunctionで代用すればよさそうです。
プラグインを削除・非アクティブにした状態でのプラグイン独自メソッド使用(Uncaught Error: Class 〇〇 not found)
関数呼び出しエラーついでに、プラグイン独自メソッドが呼べない例も紹介。例として『smart custom fields(独自メソッドSCF::get)』を取り上げます。このような独自メソッドを使っているときに、プラグインを削除・非アクティブにしてしまうと・・・
Uncaught Error: Class 〇〇 not found(クラスが見つからない)エラーになります。クラスで書いているときはこの表記、その他はファンクション見つからない、みたいになるでしょうか。これも『get_pst_meta()』などのWP組み込みであれば、データベースにカスタムフィールドデータが残っている限り読みだせます。
削除・非アクティブ以外にも『PHPやWP本体をバージョンアップしたら、対応しておらずにプラグインが読まなくなった』みたいなときも、これは発生します。『カスタムフィールドが全部消えた』みたいなのってこれかなって気はします(状況による)。
あとがき・まとめ
- PHPで廃止functionを使ってしまうと、undefined functionエラーになる
- メソッド内で関数呼び出しや、プライベート修飾子のものをクラス外呼び出しにも気を付ける
- wp親テーマ解除時に、テーマに親独自のファンクションが残っていると、Call to undefined function
- wpプラグインを削除・非アクティブにした状態でのプラグイン独自メソッドにも注意
まとめると、こんなところでしょうか。原因がわかっていれば対処しやすくなると思うので、こういう点も頭に入れつつ開発を進めていきたいと思います。
【カテゴリ】- PHP
【タグ】-