상속
일반적으로 기존 클래스와 동일한 변수 및 함수를 갖는 클래스가 필요합니다. 실제로 모든 프로젝트에서 사용되는 공통 클래스를 정의하고 각 특정 프로젝트에 맞게 이 클래스를 지속적으로 보강하는 것은 좋은 연습이 될 것입니다. 이를 더 쉽게 하기 위해 클래스는 다른 클래스에서 확장될 수 있습니다. 확장 또는 파생 클래스는 기본 클래스의 모든 변수와 함수(아무도 죽지 않는 것을 제외하고 "상속"이라고 함)를 소유하고 파생 클래스에 정의된 모든 부분을 포함합니다. 클래스의 요소는 축소될 수 없습니다. 즉, 기존 함수나 변수를 등록 취소할 수 없습니다. 확장 클래스는 항상 단일 기본 클래스에 종속됩니다. 즉, 다중 상속이 지원되지 않습니다. 클래스를 확장하려면 "extends" 키워드를 사용하세요.
코드 복사 코드는 다음과 같습니다.
class test {
public function __construct() {
}
public function name() {
$ this-> ;xname('John');
}
private function showName($name) {
echo '테스트의 내 이름은 '.$name>}
}
classextendTestextendstest {
public function __construct() {
parent::__construct()
}
private function showName($name) {
echo 'extendTest의 내 이름 $name;
}
$test = newextendTest()
위의 예는 Cart 클래스의 모든 변수와 함수, 추가 변수 $owner 및 추가 함수 set_owner()를 포함하는 Named_Cart라는 클래스를 정의합니다. 이제 일반적인 방법으로 명명된 장바구니가 생성되고 장바구니 소유자를 설정하고 검색할 수 있습니다. 일반 장바구니 클래스 함수는 명명된 장바구니 클래스에서 계속 사용할 수 있습니다.
$ncart = new Named_Cart; // 새 명명된 장바구니 만들기
$ncart ->set_owner ("kris"); // 장바구니 이름 지정
print $ncart->owner; // 장바구니 소유자 이름 출력
$ncart->add_item("10" , 1); // (장바구니 클래스에서 상속받은 함수)
?>
이것을 "아버지-자식" 관계라고도 합니다. 상위 클래스인 클래스를 만들고 확장을 사용하여 상위 클래스를 기반으로 하는 새 클래스인 하위 클래스를 만듭니다. 이 새로운 하위 클래스를 사용하여 이 하위 클래스를 기반으로 하는 다른 클래스를 만들 수도 있습니다.
참고:
클래스는 정의된 후에만 사용할 수 있습니다! Cart 클래스를 상속하기 위해 Named_Cart 클래스가 필요한 경우 먼저 Cart 클래스를 정의해야 합니다. Named_Cart 클래스를 기반으로 다른 Yellow_named_cart 클래스를 생성해야 하는 경우 먼저 Named_Cart 클래스를 정의해야 합니다. 간단히 말해서 클래스 정의의 순서는 매우 중요합니다.
코드 복사 다음과 같습니다.
class Person{
protected $name;//protected 권한은 하위 클래스에서 액세스할 수 있지만 외부에서는 액세스할 수 없습니다.
protected $age
protected; $sex ;
function __construct($name,$age,$sex){
$this->name=$name;//이것을 사용하면 name을 선언하지 않아도 다시 선언됩니다.
$this->age=$age;
$this->sex=$sex
echo "############"; >}
공용 함수 say(){
echo "내 이름: {$this->name}, 내 나이: {$this->age}:, 내 성별: {$this-> sex }
";
}
보호된 함수 eat(){
echo "wwwwwwwwwwwwwwwwwwwww
";
}
function run(){
}
protected $name;//protected 권한은 하위 클래스에서 액세스할 수 있지만 외부에서는 접근할 수 없습니다.
protected $age;
protected $sex
}
//inherited
class Student 확장 {
var $school;
function __construct($name,$age,$sex,$school){
parent::__construct();//부모 클래스의 생성자 메서드 호출
$this->school=$school;
}
//say() 메소드를 오버로드하고
보호된 함수 say()를 확장합니다.{//상위 클래스는 공개를 사용하고 하위 클래스는 상위 클래스보다 낮을 수 없으며, 상위 클래스와 동일한 권한을 가질 수 있습니다
//Person::say();//상위 클래스의 say() 메서드 호출
parent::say(); //부모 클래스 say() 메소드를 호출합니다. parent는 부모 클래스 이름을 나타내며 부모 클래스 이름이 변경될 때도 호출할 수 있습니다.
echo "우리 학교 {$this->school}
";//m.sbmmt.com
}
function Study(){
echo "{ $this ->name}님은 공부 중
";
}
}
$s=new Student("zhangsan",23,"male");
$s -> say();
$s->study();
* 1. 객체지향의 세 가지 주요 특징 중 하나
*
* 2. 개방성 및 접근성 확장성
*
* 3. 코드 재사용성 향상
*
* 4. 소프트웨어 유지 관리성 향상
*
* 5. 상속은 하위 클래스를 "확장" 상위 클래스로 사용하는 것입니다
*
* C++는 다중 상속에 속하며 동일한 클래스는 여러 개의 부모 클래스를 가질 수 있습니다
*
* PHP와 JAVA는 단일 상속에 속하며 동일한 클래스는 하나의 부모 클래스만 가질 수 있습니다
*
* 상관없습니다 상속 또는 단일 상속이 여러 하위 클래스를 가질 수 있는 수
*
* 두 개의 클래스를 설계할 때 공유할 수 있는 멤버가 있는 한 공유 콘텐츠를 단독 기본 클래스로 사용하세요
*
* 1. 클래스 상속 적용
*
* 1. 하위 클래스를 선언하고 확장 키워드를 사용하여 상위 클래스를 상속(확장)합니다
*
* 2. 하위 클래스는 상위 클래스의 모든 내용을 상속받을 수 있습니다. 멤버 속성 메소드, 생성 메소드를 포함한 클래스... 하위 클래스에서 사용할 수 있습니다
*
* 2. 액세스 유형 제어
*
* 하위 클래스는 상위 클래스의 모든 내용을 상속받을 수 있지만 private 멤버는 이 클래스에서만 사용할 수 있고 서브클래스에서는 사용할 수 없습니다
*
* 캡슐화할 때 자신만의 클래스를 만들 수 있습니다. 내부적으로 접근할 수 있고 서브클래스에서 사용할 수 있지만 클래스 외부에서는 사용할 수 없습니다. . 권한을 protected
*
*
*
*로 설정하세요. 3. 하위 클래스 메서드에서 상위 클래스를 오버로드하세요.
*
* 1. 하위 클래스에서도 같은 메서드를 선언할 수 있습니다. 즉, 하위 클래스는 상위 클래스와 동일한 이름의 메서드를 재정의합니다.
*
* 2. 하위 클래스의 메서드 쌍 상위 클래스 메서드의 확장
*
* 3. 하위 클래스의 상위 클래스에서 재정의된 메서드를 호출합니다.
* 상위 클래스 이름 사용::메서드 이름() parent::메서드 이름()
*
* 4. 생성자를 하위 클래스에 생성자가 있는 경우 상위 클래스에서 재정의된 생성자를 호출해야 합니다.
*
* 참고: 하위 클래스에서 오버로드된 메서드의 액세스 권한은 상위 클래스의 액세스 권한보다 낮을 수 없습니다. 클래스(서브클래스는 권한을 확대할 수 있지만 권한을 줄일 수는 없음)