[PHP] static, non-static 함수를 다루는 것에 얽힌 오류 두 가지

(1) static 함수를 non-static 함수처럼 다루었을 때

  non-static 메소드를 다음처럼 static 메소드를 다루듯이 쓰면 아래와 같은 오류가 날 수 있다.

PHP Fatal error:  Uncaught Error: Non-static method ClassName::MethodName() cannot be called statically in /.../index.php:122

  클래스(class)의 static 메소드를 다루려면 다음처럼 범위 지정 연산자(Scope Resolution Operator) ::을 이용한다.

$var = ClassName::MethodName($arg1, $arg2);

  MethodName이 static 메소드가 아닌 non-static 메소드이면 아래와 같은 꼴로 바꾸어 준다.

$var = (new ClassName)->MethodName($arg1, $arg2);

(2) 클래스 생성자에 매개변수가 필요할 때

 PHP Fatal error:  Uncaught ArgumentCountError: Too few arguments to function ClassName::__construct(), 0 passed in /.../index.php on line 122 and at least 1 expected in /.../library.php:144

  클래스의 생성자(__construct) 메소드에 들어갈 매개변수를 필요한 만큼 넣지 않으면 이런 오류가 날 수 있다.

Class ClassName {
……
function __construct($param1, $param2 = false) {
……
}
……
function Method_name($arg1, $arg2) {
……
}
……
}

  클래스가 위와 같은 꼴이면, 생성자가 요구하는 매개변수 $param1에 기본값이 없으므로 클래스 객체를 만들 때에 생성자 매개변수를 적어도 하나($param1)는 넣어 주어야 한다.

$var = (new ClassName)->MethodName($arg1, $arg2);

$param1 = 'ABC';
$var = (new ClassName($param1))->MethodName($arg1, $arg2);

  같은 클래스의 메소드(멤버 함수)를 자주 쓴다면 아래처럼 쓸 수도 있다.

$param1 = 'ABC';
$ClassObj = new ClassName($param1);
$var1 = $ClassObj->MethodName('a', 'b');
$var2 = $ClassObj->MethodName('c', 'd');
$var3 = $ClassObj->MethodName('e', 'f');
...
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요