정적 메서드와 프로퍼티
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 91개 중 17번째.
프로퍼티가 정적(static)일 수 있는 것과 마찬가지로, 메서드 또한 개별 객체가 아닌 클래스 자체에 속할 수 있습니다. 정적 메서드는 인스턴스를 먼저 생성할 필요 없이 클래스에서 직접 호출됩니다.
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::를 사용하여 정적 속성과 다른 정적 메서드에만 접근할 수 있습니다.
핵심 포인트: 정적 메서드는 객체 상태가 필요하지 않은 유틸리티 함수나 클래스 수준의 데이터를 관리하는 데 유용합니다. 정적 메서드는 객체 인스턴스화 없이도 기능을 제공합니다.
챌린지
쉬움객체를 인스턴스화할 필요 없이 정적 메서드와 속성을 사용하여 고유 식별자를 생성하는 ID 생성기 시스템을 만들어 보겠습니다.
코드를 구성하기 위해 두 개의 파일을 생성합니다:
IdGenerator.php— 정적 멤버만을 사용하여 고유 ID 생성을 관리하는IdGenerator클래스를 정의합니다. 이 클래스는0으로 시작하는 private 정적 속성$lastId와"ID"로 설정된 private 정적 속성$prefix를 가져야 합니다. 마지막 ID를 증가시키고 접두사와 새 ID를 결합한 형식의 문자열(예:"ID1","ID2"등)을 반환하는 정적 메서드generate()를 만듭니다. 접두사를 변경하는 정적 메서드setPrefix($newPrefix)와$lastId의 현재 값을 반환하는 정적 메서드getLastId()를 추가합니다.main.php— IdGenerator 클래스 파일을 포함합니다. 기본 접두사를 사용하여 두 개의 ID를 생성하고 각각 한 줄씩 출력합니다. 그런 다음 정적 메서드를 사용하여 접두사를"USER"로 변경하고, 두 개의 ID를 더 생성하여 각각 출력합니다. 마지막으로 적절한 정적 메서드를 호출하여 마지막 ID 번호를 출력합니다.
정적 메서드는 ClassName::methodName()을 사용하여 클래스에서 직접 호출되며, 클래스 내부에서는 self::$propertyName을 사용하여 정적 속성에 접근한다는 점을 기억하세요. 객체 인스턴스가 없으므로 정적 메서드 내에서 $this를 사용할 수 없습니다.
출력 결과는 서로 다른 접두사를 가진 ID의 진행 과정을 보여주어야 하며, 이를 통해 정적 속성이 여러 메서드 호출 간에 어떻게 값을 유지하는지 확인할 수 있습니다.
치트 시트
정적 메서드는 클래스 자체에 속하며 인스턴스를 생성하지 않고 호출됩니다. static 키워드를 사용하여 선언하고 클래스 이름과 :: 연산자를 사용하여 호출합니다:
<?php
class MathHelper {
public static function add($a, $b) {
return $a + $b;
}
}
echo MathHelper::add(5, 3); // 8
정적 메서드는 self::를 사용하여 정적 속성에 접근할 수 있습니다:
<?php
class Counter {
private static $count = 0;
public static function increment() {
self::$count++;
}
public static function getCount() {
return self::$count;
}
}
Counter::increment();
echo Counter::getCount(); // 1
정적 메서드는 객체 인스턴스가 없기 때문에 $this를 사용할 수 없습니다. self::를 사용하여 정적 속성과 다른 정적 메서드에만 접근할 수 있습니다.
정적 메서드는 객체 상태가 필요하지 않은 유틸리티 함수나 객체 인스턴스화 없이 클래스 수준의 데이터를 관리하는 데 유용합니다.
직접 해보기
<?php
// IdGenerator 클래스 파일을 포함합니다
require_once 'IdGenerator.php';
// TODO: 기본 접두사를 사용하여 두 개의 ID를 생성하고 각각을 별도의 줄에 출력합니다
// TODO: 정적 메서드를 사용하여 접두사를 "USER"로 변경합니다
// TODO: 두 개의 ID를 더 생성하고 각각을 별도의 줄에 출력합니다
// TODO: 적절한 정적 메서드를 사용하여 마지막 ID 번호를 출력합니다
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
8매직 메서드
매직 메서드 소개__toString 및 __debugInfo__get, __set, __isset, __unset__call 및 __callStatic__clone 및 객체 복제__serialize 및 __unserialize요약 - 커스텀 컬렉션