PHP 객체지향의 세 가지 주요 특징을 알아보세요.
PHP의 객체지향 학습의 세 가지 주요 특징 학습 목표: 추상화, 캡슐화, 상속 및 다형성을 완전히 이해합니다.
객체 지향의 세 가지 주요 특징: 캡슐화, 상속, 다형성 먼저 추상화를 간략하게 이해합니다.
우리가 하는 일 앞서 클래스를 정의할 때 실제로는 사물의 클래스의 공통 속성과 동작을 추출하여 물리적 모델(템플릿)을 형성합니다. 이러한 문제 연구 방법을 추상화라고 합니다.
1. 캡슐화
캡슐화 추출된 데이터와 데이터에 대한 작업은 함께 캡슐화됩니다. 데이터는 내부적으로 보호되며 프로그램의 다른 부분에서 승인된 작업(메서드)만 데이터에 대해 작업할 수 있습니다.
php는 세 가지 액세스 제어 수정자를 제공합니다.
public은 전역을 의미하며 이 클래스 내부, 클래스 외부 및 하위 클래스에 액세스할 수 있습니다.
protected는 보호됨을 의미하며 이 클래스 또는 하위 클래스만 액세스할 수 있습니다.
private은 비공개를 의미하며 이 클래스만 액세스할 수 있습니다. 내부에서 액세스할 수 있습니다. the class
위 세 가지 수정자는 메소드와 속성(변수)을 모두 수정할 수 있습니다. 메소드에 액세스 수정자가 없으면 기본값은 public입니다. 멤버 속성은 액세스 수정자를 지정해야 합니다. 이는 PHP4 var $ 이름으로도 작성됩니다. public 속성이므로 이런 방식은 권장되지 않습니다
예:
코드 복사 코드는 다음과 같습니다.
<?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; ?>
그러면 보호된 요소와 비공개 요소 및 메서드를 외부에서 액세스하려면 어떻게 해야 할까요? 일반적인 접근 방식은 공개 함수를 통해 이러한 변수 형식에 액세스하는 것입니다.
public function setxxxx($val){
$this->xxxx=$val)
}
public function getxxxx(){
return $this->xxxx
}
여기서 설정 및 가져오기는 식별의 편의를 위한 것일 뿐 필수는 아닙니다.
예:
public function getsalary(){
return $this->salary //확장: 여기서 일부 메서드를 호출할 수 있습니다. 올바른 경우에만 액세스가 허용됩니다
}
echo $p1->getsalary()를 외부에서 사용할 수 있습니다.
보호되고 비공개로 액세스하려면 다음을 사용할 수도 있습니다. 다음 방법을 사용하지만
__set() 및 _ _get()을 이해하는 한 권장되지 않습니다.
__set()는 보호 또는 비공개 속성에 값을 할당합니다
__set($name,$val); )는 protected 또는 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
해결 방법: Inherit
코드 복사 코드는 다음과 같습니다.
<?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(); ?>
class 상위 클래스 이름 {}
class 하위 클래스. name 확장 상위 클래스 이름 {}
세부 사항:
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 ?>
public 함수 __construct (){ 复制代码 代码如下: 相关推荐: PHP面向对象五大原则之依赖倒置原则(DIP)详解_php技巧 위 내용은 PHP 객체지향의 세 가지 주요 특징을 알아보세요.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!
echo 'A'
}
}
클래스 B 확장 A{
public function __construct(){
echo 'B'
}
}
$b=new B();/ /여기서 B의 생성자가 먼저 출력됩니다. B에 생성자가 없으면 A의 생성자가 출력됩니다. 3. 하위 클래스에서 상위 클래스의 메서드에 액세스해야 하는 경우(생성자 및 멤버 메서드의 수정자는 다음과 같습니다. protected 또는 private), parent class::method name 또는 parent::method name을 사용하여 완료할 수 있습니다. [여기서 parent와 이전에 언급한 self는 모두 소문자이며 오류는 대문자로 보고됩니다.]
class A{
public function test(){
echo 'a_test';
}
}
class B는 A를 확장합니다.
}
}
$b=new B();
5. 하위 클래스(파생 클래스)의 메서드가 상위 클래스(공개, 보호)의 메서드와 완전히 동일한 경우 이를 메서드 재정의 또는 메서드라고 합니다. 재정의(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、当一个父类知道所有的子类都有一个方法,但是父类不能确定该方法如何写,可以让子类去覆盖它的方法,方法覆盖(重写),必须要求子类的方法名和参数个数完全一致
2、如果子类要去调用父类的某个方法(protected/public),可以使用 父类名::方法名 或者 parent::方法名
3、在实现方法重写的时候,访问修饰符可以不一样,但是子类方法的访问权限必须大于等于父类方法的访问权限(即不能缩小父类方法的访问权限)
如 父类public function cry(){} 子类 protected function cry(){} 则会报错
但是子类的访问权限可以放大,如:
父类private function cry(){} 子类 protected function cry(){} 可以正确执行
扩展:
方法重载(overload)
基本概念:函数名相同,但参数的个数或参数的类型不同,达到调用同一个函数,可以区分不同的函数
在PHP5中虽然也支持重载,但是和其它语言还是有很大区别的,php中不能定义多个同名函数
PHP5中提供了强大的“魔术”函数,使用这些魔术函数,我们可以做到函数重载,
这里我们要到到 __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 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

여전히 인기있는 것은 사용 편의성, 유연성 및 강력한 생태계입니다. 1) 사용 편의성과 간단한 구문은 초보자에게 첫 번째 선택입니다. 2) 웹 개발, HTTP 요청 및 데이터베이스와의 우수한 상호 작용과 밀접하게 통합되었습니다. 3) 거대한 생태계는 풍부한 도구와 라이브러리를 제공합니다. 4) 활성 커뮤니티와 오픈 소스 자연은 새로운 요구와 기술 동향에 맞게 조정됩니다.

Session_Start ()로 여러 통화를하면 경고 메시지와 가능한 데이터 덮어 쓰기가 발생합니다. 1) PHP는 세션이 시작되었다는 경고를 발행합니다. 2) 세션 데이터의 예상치 못한 덮어 쓰기를 유발할 수 있습니다. 3) Session_status ()를 사용하여 반복 통화를 피하기 위해 세션 상태를 확인하십시오.

IIS 및 PHP는 호환 가능하며 FastCGI를 통해 구현됩니다. 1. IIS 구성 파일을 통해 .php 파일 요청을 FastCGI 모듈로 전달합니다. 2. FASTCGI 모듈은 PHP 프로세스를 시작하여 요청을 처리하여 성능과 안정성을 향상시킵니다. 3. 실제 응용 프로그램에서는 구성 세부 사항, 오류 디버깅 및 성능 최적화에주의를 기울여야합니다.

session_start () iscrucialinphpformanagingUsersessions.1) itiniteSanewsessionifnoneexists, 2) ResumesAnxistessions, and3) setSasessionCookieForContInuityAcrosrequests, enablingplicationsirecationSerauthenticationAndpersonalizestContent.

AI는 작곡가 사용을 최적화하는 데 도움이 될 수 있습니다. 특정 방법에는 다음이 포함됩니다. 1. 종속성 관리 최적화 : AI는 종속성을 분석하고 최상의 버전 조합을 권장하며 충돌을 줄입니다. 2. 자동화 된 코드 생성 : AI는 모범 사례를 준수하는 composer.json 파일을 생성합니다. 3. 코드 품질 향상 : AI는 잠재적 인 문제를 감지하고 최적화 제안을 제공하며 코드 품질을 향상시킵니다. 이러한 방법은 기계 학습 및 자연어 처리 기술을 통해 구현되어 개발자가 효율성과 코드 품질을 향상시킬 수 있도록 도와줍니다.

Laravel은 다음을 포함하여 웹 개발 프로세스를 최적화합니다. 1. 라우팅 시스템을 사용하여 URL 구조를 관리합니다. 2. 블레이드 템플릿 엔진을 사용하여보기 개발을 단순화하십시오. 3. 대기열을 통해 시간이 많이 걸리는 작업을 처리합니다. 4. eloquentorm을 사용하여 데이터베이스 작업을 단순화하십시오. 5. 모범 사례를 따라 코드 품질과 유지 관리를 향상시킵니다.

IIS에서 PHP 구성 및 실행에는 다음 단계가 필요합니다. 1) PHP 다운로드 및 설치, 2) IIS 구성 및 FASTCGI 모듈 추가, 3) 응용 프로그램 풀 생성 및 설정 4) 웹 사이트를 만들고 응용 프로그램 풀에 바인딩합니다. 이러한 단계를 통해 스케일링을 구성하고 성능을 최적화하여 Windows 서버에 PHP 응용 프로그램을 쉽게 배포하고 응용 프로그램 안정성 및 효율성을 향상시킬 수 있습니다.

HTML5는 5 가지 주요 개선 사항을 제공합니다. 1. 시맨틱 태그는 코드 선명도 및 SEO 효과를 향상시킵니다. 2. 멀티미디어 지원은 비디오 및 오디오 임베딩을 단순화합니다. 3. 형태 향상은 검증을 단순화한다. 4. 오프라인 및 로컬 스토리지는 사용자 경험을 향상시킵니다. 5. 캔버스 및 그래픽 기능은 웹 페이지의 시각화를 향상시킵니다.
