정적 메서드 및 속성
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 17번째.
속성이 정적일 수 있는 것처럼, 메서드도 개별 객체가 아니라 클래스 자체에 속할 수 있습니다. 정적 메서드는 먼저 인스턴스를 만들 필요 없이 클래스에서 직접 호출합니다.
static 키워드를 사용하여 정적 메서드를 선언하고, 클래스 이름과 :: 연산자를 사용하여 호출합니다:
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
public static function multiply($a, $b) {
return $a * $b;
}
}
echo MathHelper::add(5, 3) . "\n";
echo MathHelper::multiply(4, 2);
출력:
8
8정적 메서드는 정적 속성과 함께 사용할 때 효과적입니다. 일반적인 패턴은 정적 메서드를 사용하여 공유 클래스 데이터를 관리하는 것입니다.
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
Counter::increment();
echo Counter::getCount();
출력:
2정적 메서드는 객체 인스턴스가 없기 때문에 $this를 사용할 수 없습니다. 정적 속성과 다른 정적 메서드에는 self::를 사용해야만 액세스할 수 있습니다.
핵심 요점: 정적 메서드는 객체 상태가 필요하지 않은 유틸리티 함수나 class 수준의 데이터를 관리할 때 유용합니다. 객체를 인스턴스화하지 않고도 기능을 제공합니다.
챌린지
쉬움객체를 인스턴스화할 필요 없이 정적 method와 property를 사용하여 고유한 식별자를 생성하는 ID generator system을 만들어 보겠습니다.
코드를 구성하기 위해 두 개의 file을 만듭니다:
IdGenerator.php: 정적 member만 사용하여 고유한 ID 생성을 관리하는IdGeneratorclass를 Define합니다. class에는$lastId에서 시작하는 private 정적 property0과"ID"로 설정된 private 정적 property$prefix가 있어야 합니다. last ID를 Increments하고 prefix와 새 ID를 combining한 formatted string을 반환하는 정적 methodgenerate()를 Create합니다(예:"ID1","ID2"등). prefix를 Change하는 정적 methodsetPrefix($newPrefix)와 현재$lastId값을 Returns하는 정적 methodgetLastId()를 add합니다.main.php: IdGenerator class file을 Include합니다. default prefix를 사용하여 두 개의 ID를 generate하고 각각을 own line에 Print합니다. 그런 다음 정적 method를 사용하여 prefix를"USER"로 Change하고, ID를 두 개 더 generate한 뒤 각각을 Print합니다. 마지막으로 appropriate 정적 method를 호출하여 last ID number를 Print합니다.
정적 method는 ClassName::methodName()을 사용하여 class에서 직접 호출하며, class 내부에서는 self::$propertyName으로 정적 property에 access한다는 점을 기억하세요. object instance가 없으므로 정적 method에서는 $this를 사용할 수 없습니다.
출력에는 서로 다른 prefix를 사용하는 ID의 progression이 표시되어야 하며, 여러 method 호출에 걸쳐 정적 property가 그 값을 유지하는 방식이 드러나야 합니다.
직접 해보기
<?php
// IdGenerator 클래스 파일을 포함합니다
require_once 'IdGenerator.php';
// TODO: 기본 접두사를 사용하여 두 개의 ID를 생성하고 각각을 별도의 줄에 출력
// TODO: 정적 메서드를 사용하여 접두사를 "USER"로 변경
// TODO: 두 개의 ID를 더 생성하고 각각을 별도의 줄에 출력
// TODO: 적절한 정적 메서드를 사용하여 마지막 ID 번호를 출력
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러