PHP 대상 을 대상 으로 하 는 세 가지 특징 학습(추상,패키지,계승,다 중 이해)
<?php
class Person{
public $name;
protected $age;
private $salary;
function __construct($name,$age,$salary){
$this->name=$name;
$this->age=$age;
$this->salary=$salary;
}
public function showinfo(){
//
echo $this->name."||".$this->age."||".$this->salary;
}
}
$p1=new Person(' ',20,3000);
// , age salary
// echo $p1->age; echo$p1->salary;
?>
그러면 지금 외부 에서 proctected 와 private 요 소 를 방문 하고 싶 습 니 다.방법 은 어떻게 해 야 합 니까?일반적인 방법 은 Public 함 수 를 통 해 이러한 변수 형식 에 접근 하 는 것 입 니 다:Public function setxxxx($val){$this->xxxx=$val;}public function getxxxx(){ return $this->xxxx; } 여기 set 와 get 은 식별 편 의 를 위해 서 입 니 다.예 를 들 어 Public function getsalary(){return$this->salary;/확장:사용자 이름 을 판단 하 는 등 정확 한 방법 을 사용 할 수 있 습 니 다}외부 에서 echo$p1->getsalary()를 사용 할 수 있 습 니 다.proctected 와 private 를 방문 하려 면 다음 과 같은 방법 을 사용 할 수 있 지만 추천 하지 않 습 니 다.알 기만 하면 됩 니 다set()와get() __set()proctected 또는 private 속성 에 할당 작업set($name,$val); __get()proctected 또는 private 의 값 가 져 오기get($name); 예 를 들 어
<?php
class testa{
protected $name;
// __set()
public function __set($pro_name,$pro_val){
// $pro_name $pro_val
// $this->pro_name ,
$this->pro_name=$pro_val;
}
// __get()
public function __get($pro_name){
if(isset($pro_name)){
return $this->pro_name;
} else {
return null;
}
}
}
$n1=new testa();
// , protected ,
$n1->name=' ';
echo $n1->name;
?>
//이상 코드 를 알 아 보면 됩 니 다.2.계승 성 을 추천 하지 않 습 니 다.먼저 예 를 들 어
<?php
class Pupil{
public $name;
protected $age;
public function getinfo(){
echo $this->name.'||'.$this->age;
}
public function testing(){
echo 'this is pupil';
}
}
class Graduate{
public $name;
protected $age;
public function getinfo(){
echo $this->name.'||'.$this->age;
}
public function testing(){
echo 'this is Graduate';
}
}
?>
위의 예 를 통 해 알 수 있 듯 이 여러 가지 공통점 과 방법 이 있 을 때 코드 의 재 활용 성 이 높 지 않 고 코드 가 지루 하 며 css 중의 처리 방법 을 생각 합 니 다.계승
<?php
class Students{
public $name;
public $age;
public function __construct($name,$age){
$this->name=$name;
$this->age=$age;
}
public function showinfo(){
echo $this->name.'||'.$this->age;
}
}
class Pupil extends Students{
function testing(){
echo 'Pupil '.$this->name.' is testing';
}
}
class Graduate extends Students{
function testing(){
echo 'Graduate '.$this->name.' is testing';
}
}
$stu1=new Pupil(' ',20);
$stu1->showinfo();
echo '<br/>';
$stu1->testing();
?>
위 에서 볼 수 있 습 니 다.계승 이란 하위 클래스(Subclass)가 extends 부모 클래스 를 통 해 부모 클래스(BaseClass)의 Public 와 proctected 의 속성 과 방법 을 계속 유지 하 는 것 입 니 다.private 속성 과 방법 문법 구 조 를 계승 할 수 없습니다.class 부모 클래스{}class 하위 클래스 extends 부모 클래스{}세부 사항:1.하나의 하위 클래스 는 하나의 부모 클래스 만 계승 할 수 있 습 니 다.여러 종류의 속성 과 방법 을 계승 하려 면 다 중 상속 예 를 사용 할 수 있 습 니 다
<?php
class A{
public $name='AAA';
}
class B extends A{
public $age=30;
}
class C extends B{}
$p=new C();
echo $p->name;// AAA
?>
2.특정한 하위 클래스 대상 을 만 들 때 기본 적 인 상황 에서 부모 클래스 의 구조 함수 예 를 자동 으로 호출 하지 않 습 니 다:class A{Public functionconstruct(){ echo 'A'; } } class B extends A{ public function __construct(){ echo 'B'; } } $b=new B();//B 의 구조 방법 을 우선 출력 합 니 다.B 에 구조 방법 이 없어 야 A 의 3 을 출력 할 수 있 습 니 다.하위 클래스 에서 부모 클래스 에 접근 하 는 방법(구조 방법,구성원 방법 방법의 수식 자 는 proctected 또는 private)이 필요 하 다 면 부모 클래스 를 사용 할 수 있 습 니 다.방법 명 또는 parent:방법 명 으로 완성 할 수 있 습 니 다.[여기 parent 와 이전에 언급 한 self 는 모두 소문 자 입 니 다.대문자 오류]class A{public function test(){echo'atest'; } } class B extends A{ public function __construct(){/두 가지 방법 모두 가능 합 니 다 A:test();parent::test(); } } $b=new B(); 5.만약 에 하나의 하위 클래스(파생 류)의 방법 이 아버지 류 의 방법 과 똑 같 을 때(Public,proctected)우 리 는 방법 커버 또는 방법 재 작성(override)이 라 고 부 릅 니 다.아래 의 다 형 성 3,다 형 성 예 를 보 세 요
<?php
class Animal{
public $name;
public $price;
function cry(){
echo 'i don\'t know';
}
}
class Dog extends Animal{
// 、
function cry(){
echo 'Wang Wang!';
Animal::cry();// , cry();
}
}
$dog1=new Dog();
$dog1->cry();
?>
소결:1.아버지 류 가 모든 하위 클래스 에 방법 이 있다 는 것 을 알 지만 아버지 류 는 이 방법 을 어떻게 쓰 는 지 확정 할 수 없습니다.하위 클래스 를 덮어 쓰 는 방법,덮어 쓰기(재 작성)방법,하위 클래스 의 방법 이름과 매개 변수 개수 가 완전히 일치 해 야 합 니 다.그러나 하위 클래스 방법의 접근 권한 은 부모 클래스 방법 과 같은 접근 권한(즉,부모 클래스 방법의 접근 권한 을 축소 할 수 없 음)보다 커 야 합 니 다.예 를 들 어 부모 클래스 Public function cry(){}하위 클래스 proctected function cry(){}는 오 류 를 보고 하지만 하위 클래스 의 접근 권한 은 확대 할 수 있 습 니 다.예 를 들 어 부모 클래스 private function cry(){}하위 클래스 proctected function cry(){}은 확장 을 정확하게 수행 할 수 있 습 니 다.방법 리 셋(overload)기본 개념:함수 이름 은 같 지만 매개 변수의 개수 나 매개 변수의 유형 이 다 르 기 때문에 같은 함 수 를 호출 할 수 있 습 니 다.서로 다른 함 수 는 PHP 5 에서 도 리 셋 을 지원 하지만 다른 언어 와 큰 차이 가 있 습 니 다.php 에 서 는 여러 개의 동명 함 수 를 정의 할 수 없습니다.PHP 5 에 서 는 강력 한"마술"함 수 를 제공 합 니 다.이 마술 함 수 를 사용 하면 함 수 를 다시 불 러 올 수 있 습 니 다.여기 서 우 리 는 까지 가 야 합 니 다.call,대상 이 방법 을 바 꿀 때 이 방법 이 존재 하지 않 으 면 프로그램 이 자동 으로 를 호출 합 니 다.call[공식 추천 하지 않 음]PHP 에는 다음 과 같은 몇 가지 마술 상수 가 있 습 니 다:LINE__ __FILE__ __DIR__ __FUNCTION__ __CLASS__ 등 례:
<?php
class A{
function test1($p){
echo 'test1<br/>';
}
function test2($p){
echo 'test2<br/>';
}
function __call($method,$p){
// $p ,
if($method == 'test'){
if(count($p)==1){
$this->test1($p);
} else if(count($p)==2){
$this->test2($p);
}
}
}
}
$a=new A();
$a->test(5);
$a->test(3,5);
?>
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 가 대상 을 대상 으로 하 는 패 키 징,계승,다 형,추상 을 상세히 이해 합 니 다.상기 예 에서 보 듯 이 테스트 클래스 는 문자 클래스 에 있어 서로 다른 가방 에 있 는 전혀 무관 한 클래스 입 니 다.호출 할 때 권한 수정자 에 의 해 제 한 됩 니 다.따라서 여기 서 명확 하 게 하 겠 습...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.