icon
Let's create! WordPressサイト制作とメンテ/エラー対応から、PHP/CSS/javascriptプログラミング、動画・音・イラスト等制作まで扱うコラム

【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* 系のすべての関数』というところがソースです。

private functionなのにクラス外部から呼び出す(private method 〇〇 from global scope)

PHPのアクセス修飾子(public, private, protected)というのがあるんですけど、privateをクラス外から呼んでしまうと『private method 〇〇 from global scope』エラーになります。上記のコードは動作しません。

public functionにするか、publicなプロパティに代入するか、みたいな対応になりそうです。

疑似変数$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
【タグ】-

関連記事