[PHP] static, non-static 함수를 다루는 것에 얽힌 오류 두 가지
그물터 관리/PHP
2022/06/01 12:45
(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');
...
덧글을 달아 주세요