PHPのエラー『Fatal Error: Call to a Member Function on Non-object』の解決方法

  • 作成日 2025.07.03
  • php
PHPのエラー『Fatal Error: Call to a Member Function on Non-object』の解決方法

PHPで開発中に『Fatal Error: Call to a Member Function on Non-object』というエラーが発生することがあります。このエラーは、オブジェクトではない値に対してメンバー関数を呼び出そうとした場合に発生します。この記事では、このエラーの原因と解決方法について詳しく説明します。

エラーの発生条件

『Fatal Error: Call to a Member Function on Non-object』は、オブジェクトではない値に対してメンバー関数を呼び出そうとした場合に発生します。このエラーは、主に以下のような状況で発生します。

1. オブジェクトが正しく初期化されていない場合

オブジェクトが正しく初期化されていない場合、このエラーが発生します。

<?php
$obj = null;
$obj->method(); // Fatal Error: Call to a member function method() on null
?>

2. オブジェクトが返されない関数を呼び出した場合

オブジェクトが返されない関数を呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
function getObject() {
    return null;
}

$obj = getObject();
$obj->method(); // Fatal Error: Call to a member function method() on null
?>

3. オブジェクトが返されないメソッドを呼び出した場合

オブジェクトが返されないメソッドを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
class MyClass {
    public function getObject() {
        return null;
    }
}

$obj = new MyClass();
$obj->getObject()->method(); // Fatal Error: Call to a member function method() on null
?>

4. オブジェクトが返されない静的メソッドを呼び出した場合

オブジェクトが返されない静的メソッドを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
class MyClass {
    public static function getObject() {
        return null;
    }
}

$obj = MyClass::getObject();
$obj->method(); // Fatal Error: Call to a member function method() on null
?>

5. オブジェクトが返されないマジックメソッドを呼び出した場合

オブジェクトが返されないマジックメソッドを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
class MyClass {
    public function __toString() {
        return null;
    }
}

$obj = new MyClass();
$obj->__toString()->method(); // Fatal Error: Call to a member function method() on null
?>

6. オブジェクトが返されないクロージャを呼び出した場合

オブジェクトが返されないクロージャを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
$closure = function() {
    return null;
};

$obj = $closure();
$obj->method(); // Fatal Error: Call to a member function method() on null
?>

7. オブジェクトが返されないコールバック関数を呼び出した場合

オブジェクトが返されないコールバック関数を呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
function callback() {
    return null;
}

$obj = call_user_func('callback');
$obj->method(); // Fatal Error: Call to a member function method() on null
?>

8. オブジェクトが返されないコンストラクタを呼び出した場合

オブジェクトが返されないコンストラクタを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
class MyClass {
    public function __construct() {
        return null;
    }
}

$obj = new MyClass();
$obj->method(); // Fatal Error: Call to a member function method() on null
?>

9. オブジェクトが返されないファクトリメソッドを呼び出した場合

オブジェクトが返されないファクトリメソッドを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
class MyClass {
    public static function create() {
        return null;
    }
}

$obj = MyClass::create();
$obj->method(); // Fatal Error: Call to a member function method() on null
?>

10. オブジェクトが返されないイテレータを呼び出した場合

オブジェクトが返されないイテレータを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
class MyClass implements Iterator {
    public function current() {
        return null;
    }

    public function next() {}
    public function key() {}
    public function valid() {}
    public function rewind() {}
}

$obj = new MyClass();
$obj->current()->method(); // Fatal Error: Call to a member function method() on null
?>

11. オブジェクトが返されないジェネレータを呼び出した場合

オブジェクトが返されないジェネレータを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
function generator() {
    yield null;
}

$obj = generator()->current();
$obj->method(); // Fatal Error: Call to a member function method() on null
?>

12. オブジェクトが返されないマジックプロパティを呼び出した場合

オブジェクトが返されないマジックプロパティを呼び出し、その結果に対してメンバー関数を呼び出そうとした場合、このエラーが発生します。

<?php
class MyClass {
    public function __get($name) {
        return null;
    }
}

$obj = new MyClass();
$obj->property->method(); // Fatal Error: Call to a member function method() on null
?>

これらの例を見てわかるように、『Fatal Error: Call to a Member Function on Non-object』は、主にオブジェクトではない値に対してメンバー関数を呼び出そうとした場合に発生します。オブジェクトが正しく初期化されているか確認することで、このエラーを解決することができます。