빠른 수정 4 - PHP: 클래스 기본, 추상 클래스, 인터페이스, 특성
[소스 코드 다운로드]
저자: webabcd
소개
빠른 해결책: PHP
- 클래스 기본
- 추상 클래스
- 인터페이스
- 특성
예
1. 수업 관련 지식 포인트 1(기본)
class/class1.php
<?<span>php </span><span>/*</span><span>* * 类的相关知识点 1(基础) * * 规范:命名空间与目录路径对应,类名与文件名对应,文件以 .class.php 为后缀名 </span><span>*/</span><span>class</span><span> MyClass1 { </span><span>//</span><span> 类常量,没有“$”符号,不能被覆盖</span><span>const</span> MyConstant = 'constant value'<span>; </span><span>//</span><span> 静态属性</span><span>static</span><span>$myStaticProperty</span> = "static property"<span>; </span><span>//</span><span> 对于属性和方法的访问控制有 private protected public(默认值)</span><span>private</span><span>$_name</span><span>; </span><span>private</span><span>$_age</span><span>; </span><span>//</span><span> 构造函数 // PHP 中的魔术方法(magic method)均以 __(两个下划线)开头(类似的还有 __destruct(),__call(),__callStatic(),__get(),__set(),__isset(),__unset(),__sleep(),__wakeup(),__toString(),__invoke(),__set_state() 和 __clone() 等)</span><span>function</span><span> __construct() { </span><span>echo</span> "MyClass1 construct"<span>; </span><span>echo</span> "<br />"<span>; </span><span>//</span><span> 获取参数个数</span><span>$args_num</span> = <span>func_num_args</span><span>(); </span><span>if</span> (<span>$args_num</span> == 1<span>) { </span><span>//</span><span> $this 代表当前对象,是指向类实例的指针</span><span>$this</span>->_name = <span>func_get_arg</span>(0<span>); } </span><span>else</span><span>if</span> (<span>$args_num</span> == 2<span>) { </span><span>$this</span>->_name = <span>func_get_arg</span>(0<span>); </span><span>$this</span>->_age = <span>func_get_arg</span>(1<span>); } </span><span>else</span><span> { } } </span><span>//</span><span> 析构函数</span><span>function</span><span> __destruct() { </span><span>print</span> "MyClass1 destruct"<span>; </span><span>echo</span> "<br />"<span>; } </span><span>//</span><span> 构造函数,此种方式在 PHP 5.3.3 或以上可支持 // 此种方式的构造函数也可以当做方法被调用</span><span>public</span><span>function</span><span> MyClass1() { </span><span>echo</span> "i am not a construct, i am a method"<span>; } </span><span>//</span><span> 静态方法</span><span>public</span><span>static</span><span>function</span><span> myStaticMethod() { </span><span>return</span> "static method"<span>; } </span><span>//</span><span> 方法</span><span>public</span><span>function</span><span> getInfo() { </span><span>//</span><span> $this 代表当前对象,是指向类实例的指针</span><span>return</span> "name: " . <span>$this</span>->_name . ", age: " . <span>$this</span>-><span>_age; } </span><span>//</span><span> 不直接支持方法的重载(overload),可以通过相关的魔术方法来实现(参见:class3.php) // public function getInfo($name) { } // 带参数类型约束的方法,类型约束不能用于 int 或 string 之类的标量类型 // 本例约束了参数 $ary 必须是 array 类型</span><span>public</span><span>function</span> getFirst(<span>array</span><span>$ary</span><span>) { </span><span>return</span><span>$ary</span>[0<span>]; } } </span><span>//</span><span> 被声明为 final 的类或属性或方法,无法继承 // 只能继承一个类</span><span>final</span><span>class</span> MyClass2 <span>extends</span><span> MyClass1 { </span><span>//</span><span> 构造函数可以为参数设置默认值(方法或函数也可以为参数设置默认值)</span><span>function</span> __construct(<span>$name</span> = "wanglei", <span>$age</span> = 100<span>) { </span><span>echo</span> "MyClass2 construct"<span>; </span><span>echo</span> "<br />"<span>; </span><span>//</span><span> parent 代表当前类的基类</span> parent::__construct(<span>$name</span>, <span>$age</span><span>); </span><span>//</span><span> self 代表当前类 // $this 代表当前对象,是指向类实例的指针</span><span> } </span><span>//</span><span> 析构函数</span><span>function</span><span> __destruct() { </span><span>print</span> "MyClass2 destruct"<span>; </span><span>echo</span> "<br />"<span>; parent</span>::<span>__destruct(); } </span><span>//</span><span> 覆盖基类的同名方法(override)</span><span>public</span><span>function</span><span> getInfo() { </span><span>//</span><span> $this 代表当前对象,指向类实例的指针</span><span>return</span> "MyClass2 - " . parent::<span>getInfo(); } } </span><span>//</span><span> 类的实例化</span><span>$objClass1</span> = <span>new</span> MyClass1("webabcd", 35<span>); </span><span>//</span><span> 通过 -> 调用实例方法或实例属性</span><span>echo</span><span>$objClass1</span>-><span>getInfo(); </span><span>echo</span> "<br />"<span>; </span><span>//</span><span> 通过 -> 调用实例方法或实例属性(MyClass1() 是构造函数,也可以当做方法被调用)</span><span>echo</span><span>$objClass1</span>-><span>MyClass1(); </span><span>echo</span> "<br />"<span>; </span><span>$objClass2</span> = <span>new</span><span> MyClass2(); </span><span>echo</span><span>$objClass2</span>-><span>getInfo(); </span><span>echo</span> "<br />"<span>; </span><span>//</span><span> instanceof - 用于判断一个对象是否是指定类的实例</span><span>if</span>(<span>$objClass2</span><span> instanceof MyClass1) { </span><span>echo</span> '$objClass2 instanceof MyClass1'<span>; </span><span>echo</span> "<br />"<span>; } </span><span>//</span><span> 通过 :: 调用类常量或静态属性或静态方法</span><span>echo</span> MyClass1::<span>MyConstant; </span><span>echo</span> "<br />"<span>; </span><span>//</span><span> 通过 :: 调用类常量或静态属性或静态方法</span><span>echo</span> MyClass1::<span>$myStaticProperty</span><span>; </span><span>echo</span> "<br />"<span>; </span><span>//</span><span> variable class(可变类),将变量的值作为类名</span><span>$className</span> = 'MyClass1'<span>; </span><span>//</span><span> variable method(可变方法),将变量的值作为方法名</span><span>$methodName</span> = 'myStaticMethod'<span>; </span><span>//</span><span> 通过 :: 调用类常量或静态属性或静态方法</span><span>echo</span><span>$className</span>::<span>$methodName</span><span>(); </span><span>echo</span> "<br />"<span>; </span><span>//</span><span> 调用带参数类型约束的方法</span><span>echo</span><span>$objClass1</span>->getFirst(<span>array</span>("a", "b", "c"<span>)); </span><span>echo</span> "<br />";
2. Abstract 클래스, 인터페이스, 특성)
class/class2.php
<?<span>php </span><span>/*</span><span>* * 类的相关知识点 2(抽象类,接口,trait) </span><span>*/</span><span>//</span><span> 抽象类</span><span>abstract</span><span>class</span><span> MyAbstractClass { </span><span>//</span><span> 抽象方法,子类必须定义这些方法</span><span>abstract</span><span>protected</span><span>function</span><span> getValue1(); </span><span>abstract</span><span>public</span><span>function</span> getValue2(<span>$param1</span><span>); </span><span>//</span><span> 普通方法(非抽象方法)</span><span>public</span><span>function</span><span> getValue0() { </span><span>return</span> "getValue0"<span>; } } </span><span>//</span><span> 接口</span><span>interface</span><span> MyInterface1 { </span><span>//</span><span> 接口常量,不能被覆盖</span><span>const</span> MyConstant = 'constant value'<span>; </span><span>public</span><span>function</span><span> getValue3(); } </span><span>//</span><span> 接口</span><span>interface</span> MyInterface2 <span>extends</span><span> MyInterface1 { </span><span>public</span><span>function</span><span> getValue4(); } </span><span>//</span><span> 接口</span><span>interface</span><span> MyInterface3 { </span><span>public</span><span>function</span><span> getValue5(); } </span><span>//</span><span> trait(可以 use 多个,允许有实现代码,但是本身不能实例化)</span><span>trait MyTrait1 { </span><span>//</span><span> 可以具有方法,静态方法,属性等</span><span>function</span><span> getValue6() { </span><span>return</span> "getValue6"<span>; } } </span><span>//</span><span> trait(可以 use 多个,允许有实现代码,但是本身不能实例化)</span><span>trait MyTrait2 { </span><span>//</span><span> 抽象方法(use 这个 trait 的类必须要定义这个方法)</span><span>abstract</span><span>function</span><span> getValue7(); } </span><span>//</span><span> trait(可以 use 多个,允许有实现代码,但是本身不能实例化)</span><span>trait MyTrait3 { </span><span>function</span><span> getValue6() { </span><span>return</span> "getValue6"<span>; } </span><span>function</span><span> getValue8() { </span><span>return</span> "getValue8"<span>; } } </span><span>//</span><span> 必须实现所有抽象方法和接口方法 // 类只能单继承,接口可以多继承</span><span>class</span> MyClass1 <span>extends</span> MyAbstractClass <span>implements</span> MyInterface2,<span> MyInterface3 { </span><span>//</span><span> 可以 use 多个 trait</span><span>use</span> MyTrait1,<span> MyTrait2; </span><span>use</span><span> MyTrait3 { </span><span>//</span><span> 多 trait 间有重名的,可以指定以哪个为准</span> MyTrait1::<span>getValue6 insteadof MyTrait3; </span><span>//</span><span> 可以为 trait 的指定方法设置别名(调用的时候用方法名也行,用别名也行)</span> MyTrait3::getValue8 <span>as</span><span> alias; } </span><span>//</span><span> 可以将 protected 升级为 public</span><span>public</span><span>function</span><span> getValue1() { </span><span>return</span> "getValue1"<span>; } </span><span>//</span><span> 可以加参数,但是加的参数必须要有默认值</span><span>public</span><span>function</span> getValue2(<span>$param1</span>, <span>$param2</span> = 'param2'<span>) { </span><span>return</span> "getValue2, {<span>$param1</span>}, {<span>$param2</span>}"<span>; } </span><span>public</span><span>function</span><span> getValue3() { </span><span>return</span> "getValue3"<span>; } </span><span>public</span><span>function</span><span> getValue4() { </span><span>return</span> "getValue4"<span>; } </span><span>public</span><span>function</span><span> getValue5() { </span><span>return</span> "getValue5"<span>; } </span><span>public</span><span>function</span><span> getValue7() { </span><span>return</span> "getValue7"<span>; } } </span><span>//</span><span> 调用接口常量</span><span>echo</span> MyInterface1::<span>MyConstant; </span><span>echo</span> "<br />"<span>; </span><span>$myClass1</span> = <span>new</span><span> MyClass1; </span><span>echo</span><span>$myClass1</span>-><span>getValue0(); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>-><span>getValue1(); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>->getValue2("webabcd"<span>); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>-><span>getValue3(); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>-><span>getValue4(); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>-><span>getValue5(); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>-><span>getValue6(); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>-><span>getValue7(); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>-><span>getValue8(); </span><span>echo</span> "<br />"<span>; </span><span>echo</span><span>$myClass1</span>-><span>alias(); </span><span>echo</span> "<br />";
OK
[소스코드 다운로드]
위에서는 Quick Solution 4 - PHP: 클래스 기본, 추상 클래스, 인터페이스, 특성 등의 내용을 소개했으며, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











많은 사용자들이 스마트 시계를 선택할 때 Huawei 브랜드를 선택하게 됩니다. 그 중 Huawei GT3pro와 GT4가 가장 인기 있는 선택입니다. 두 제품의 차이점을 궁금해하는 사용자가 많습니다. Huawei GT3pro와 GT4의 차이점은 무엇입니까? 1. 외관 GT4: 46mm와 41mm, 재질은 유리 거울 + 스테인레스 스틸 본체 + 고해상도 섬유 후면 쉘입니다. GT3pro: 46.6mm 및 42.9mm, 재질은 사파이어 유리 + 티타늄 본체/세라믹 본체 + 세라믹 백 쉘입니다. 2. 건강한 GT4: 최신 Huawei Truseen5.5+ 알고리즘을 사용하면 결과가 더 정확해집니다. GT3pro: ECG 심전도, 혈관 및 안전성 추가

C 언어에서 return의 사용법은 다음과 같습니다. 1. 반환 값 유형이 void인 함수의 경우 return 문을 사용하여 함수 실행을 조기에 종료할 수 있습니다. 2. 반환 값 유형이 void가 아닌 함수의 경우 return 문은 함수 실행을 종료하는 것입니다. 결과는 호출자에게 반환됩니다. 3. 함수 실행을 조기에 종료합니다. 함수 내부에서는 return 문을 사용하여 함수 실행을 조기에 종료할 수 있습니다. 함수가 값을 반환하지 않는 경우.

소스 코드: publicclassReturnFinallyDemo{publicstaticvoidmain(String[]args){System.out.println(case1());}publicstaticintcase1(){intx;try{x=1;returnx;}finally{x=3;}}}# 출력 위 코드의 출력은 간단히 결론을 내릴 수 있습니다. return은 finally 전에 실행됩니다. 바이트코드 수준에서 무슨 일이 일어나는지 살펴보겠습니다. 다음은 case1 메소드의 바이트코드 일부를 가로채서 소스 코드를 비교하여 각 명령어의 의미를 주석으로 표시합니다.

Windows 11에서 캡처 도구가 작동하지 않는 이유 문제의 근본 원인을 이해하면 올바른 솔루션을 찾는 데 도움이 될 수 있습니다. 캡처 도구가 제대로 작동하지 않는 주요 이유는 다음과 같습니다. 초점 도우미가 켜져 있습니다. 이렇게 하면 캡처 도구가 열리지 않습니다. 손상된 응용 프로그램: 캡처 도구가 실행 시 충돌하는 경우 응용 프로그램이 손상되었을 수 있습니다. 오래된 그래픽 드라이버: 호환되지 않는 드라이버가 캡처 도구를 방해할 수 있습니다. 다른 응용 프로그램의 간섭: 실행 중인 다른 응용 프로그램이 캡처 도구와 충돌할 수 있습니다. 인증서가 만료되었습니다. 업그레이드 프로세스 중 오류로 인해 이 문제가 발생할 수 있습니다. 이 문제는 대부분의 사용자에게 적합하며 특별한 기술 지식이 필요하지 않습니다. 1. Windows 및 Microsoft Store 앱 업데이트

오늘날 급속한 기술 발전의 시대에 프로그래밍 언어는 비가 내린 뒤 버섯처럼 솟아오르고 있습니다. 많은 주목을 받고 있는 언어 중 하나가 바로 Go 언어인데, 단순성, 효율성, 동시성 안전성 등 다양한 기능으로 많은 개발자들에게 사랑을 받고 있습니다. Go 언어는 뛰어난 오픈 소스 프로젝트가 많이 포함된 강력한 생태계로 유명합니다. 이 기사에서는 선택된 Go 언어 오픈 소스 프로젝트 5개를 소개하고 독자가 Go 언어 오픈 소스 프로젝트의 세계를 탐색하도록 안내합니다. KubernetesKubernetes는 자동화를 위한 오픈 소스 컨테이너 오케스트레이션 엔진입니다.

"Go 언어 개발 필수 사항: 5가지 인기 프레임워크 권장 사항" 빠르고 효율적인 프로그래밍 언어인 Go 언어는 점점 더 많은 개발자들이 선호하고 있습니다. 개발 효율성을 높이고 코드 구조를 최적화하기 위해 많은 개발자는 프레임워크를 사용하여 애플리케이션을 빠르게 구축하는 방법을 선택합니다. Go 언어의 세계에는 선택할 수 있는 훌륭한 프레임워크가 많이 있습니다. 이 기사에서는 인기 있는 Go 언어 프레임워크 5개를 소개하고 독자가 이러한 프레임워크를 더 잘 이해하고 사용할 수 있도록 구체적인 코드 예제를 제공합니다. 1.GinGin은 빠른 속도를 갖춘 경량 웹 프레임워크입니다.

1부: 초기 문제 해결 단계 Apple 시스템 상태 확인: 복잡한 솔루션을 살펴보기 전에 기본 사항부터 시작해 보겠습니다. 문제는 귀하의 기기에 있는 것이 아닐 수도 있습니다. Apple 서버가 다운되었을 수도 있습니다. Apple의 시스템 상태 페이지를 방문하여 AppStore가 제대로 작동하는지 확인하세요. 문제가 있는 경우 Apple이 문제를 해결하기를 기다리는 것뿐입니다. 인터넷 연결 확인: "AppStore에 연결할 수 없음" 문제는 때때로 연결 불량으로 인해 발생할 수 있으므로 인터넷 연결이 안정적인지 확인하십시오. Wi-Fi와 모바일 데이터 간을 전환하거나 네트워크 설정을 재설정해 보세요(일반 > 재설정 > 네트워크 설정 재설정 > 설정). iOS 버전을 업데이트하세요.

PHP에서 echo 키워드의 역할과 사용법에 대한 자세한 설명 PHP는 널리 사용되는 서버측 스크립트 언어로 웹 개발에 널리 사용됩니다. echo 키워드는 PHP에서 내용을 출력하는 데 사용되는 메서드입니다. 이번 글에서는 echo 키워드의 기능과 사용법을 자세히 소개하겠습니다. 기능: echo 키워드의 주요 기능은 콘텐츠를 브라우저에 출력하는 것입니다. 웹 개발에서는 데이터를 프런트엔드 페이지에 동적으로 표시해야 합니다. 이때 echo 키워드를 사용하여 데이터를 페이지에 출력할 수 있습니다. 이자형
