인스턴스 속성 vs 정적 속성
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 15번째.
class에서 property를 만들 때, 각 개별 객체에 속하는지 아니면 class 자체에 속하는지 결정해야 합니다. 이러한 구분이 instance properties와 static properties의 차이입니다.
인스턴스 properties가 기본값입니다. 각 객체는 property의 자체 복사본을 가지며, 한 객체에서 이를 변경해도 다른 객체에는 영향을 주지 않습니다.
<?php
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo $alice->name . "\n";
echo $bob->name . "\n";
출력:
Alice
Bob
정적 속성은 특정 객체가 아니라 class에 속합니다. static 키워드로 선언하고, ->를 사용하는 객체 대신 ::와 함께 class 이름을 사용하여 액세스합니다.
<?php
class User {
public static $count = 0;
public $name;
public function __construct($name) {
$this->name = $name;
self::$count++;
}
}
$alice = new User("Alice");
$bob = new User("Bob");
echo User::$count;
출력:
2
$count가 모든 인스턴스에서 공유된다는 점에 주목하세요. 새로운 User를 만들 때마다 동일한 $count 변수가 증가합니다. 클래스 내부에서는 정적 속성을 참조하기 위해 self::$count를 사용합니다.
핵심 사항: 각 객체가 자체 값을 필요로 할 때는 instance properties를 사용하세요. 인스턴스 수를 계산하거나 구성을 저장하는 것처럼 class의 모든 객체 간에 데이터를 공유해야 할 때는 static properties를 사용하세요.
챌린지
쉬움각 방문자에게 고유한 인스턴스 속성과 모든 방문자 간에 공유되는 static 속성의 차이를 보여 주는 방문자 추적 시스템을 만들어 보겠습니다.
코드를 정리하기 위해 두 개의 파일을 만들 것입니다.
Visitor.php: 개별 방문자를 추적하고 전체 방문자 수를 계속 집계하는Visitorclass를 Define하세요. 각 방문자는 자신만의$nameproperty(인스턴스 속성)를 가져야 하며,$totalVisitorsproperty는 모든 instance에서 공유되어야 합니다(static 속성). constructor는 이름을 Accepts하고, 이름을 Sets한 다음, total 방문자 수를 Increments합니다.getInfo()method를 추가하여"[name] is visitor #[totalVisitors]"를 returns하도록 하세요.main.php: Visitor class 파일을 Include한 다음,"Alice","Bob","Charlie"라는 names를 가진 세 명의 방문자를 해당 order대로 Create하세요. 세 명을 모두 생성한 후, 각 방문자에 대해getInfo()를 호출한 result를 Print하세요(각 result는 own line에 표시). 그런 다음Visitor::$totalVisitors를 사용하여 class에서 직접 static property에 액세스해 total 방문자 수를 Print하세요.
class 내부에서는 self::$propertyName을 사용하여 static properties에 액세스하고, class 외부에서는 ClassName::$propertyName을 사용한다는 점을 Remember하세요. Instance properties에는 평소처럼 $this->propertyName으로 액세스합니다.
출력에는 각 방문자와 할당된 번호가 표시되고, 마지막 line에는 최종 total count가 표시되어야 합니다.
직접 해보기
<?php
// Visitor 클래스를 포함합니다
require_once 'Visitor.php';
// TODO: "Alice", "Bob", "Charlie" 이름을 가진 방문자 세 명을 생성하세요 (그 순서로)
// TODO: 각 방문자의 getInfo() 결과를 출력하세요 (각각 별도의 줄에)
// TODO: Visitor::$totalVisitors를 사용하여 총 방문자 수를 출력하세요
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러