객체 지향 프로그래밍(OOP, 객체 지향 프로그래밍)은 컴퓨터 프로그래밍 아키텍처입니다. OOP의 기본 원칙 중 하나는 컴퓨터 프로그램이 서브루틴으로 작동할 수 있는 단일 단위 또는 객체로 구성된다는 것입니다. 소프트웨어 엔지니어링의 세 가지 목표: 재사용성, 유연성, 확장성. 전반적인 작업을 실현하기 위해 각 개체는 정보를 수신하고, 데이터를 처리하고, 다른 개체에 정보를 보낼 수 있습니다. 객체지향은 소프트웨어 개발 분야에서 항상 뜨거운 주제였습니다. 우선, 객체지향은 인간이 사물을 바라보는 일반적인 규칙과 일치합니다. 둘째, 객체 지향 방법을 사용하면 시스템의 각 부분이 해당 임무를 수행하고 수행할 수 있습니다. 이는 프로그래머가 더 간단하고, 유지 관리하기 쉽고, 재사용 가능한 코드를 작성할 수 있는 기회를 열어줍니다. 어떤 사람들은 PHP가 진정한 객체 지향 언어가 아니라고 말하는데 이는 사실입니다. PHP는 하이브리드 언어이므로 OOP 또는 기존 절차 프로그래밍을 사용할 수 있습니다. 그러나 대규모 프로젝트의 경우 순수 OOP를 사용하여 PHP에서 클래스를 선언하고 프로젝트에서는 개체와 클래스만 사용해야 할 수도 있습니다. 이 개념에 대해서는 자세히 설명하지 않겠습니다. 왜냐하면 많은 사람들과 친구들이 객체 지향 프로그래밍을 멀리하는 주된 이유는 객체 지향 개념을 접하자마자 이해하지 못하기 때문입니다. 더 이상 배우고 싶지 않습니다. 독자가 전체 내용을 읽을 때까지 기다리십시오.
객체지향을 배우니까 먼저 프로세스지향이 무엇인지부터 알아보겠습니다.
프로세스 지향
"프로시저 지향"은 프로세스 중심 프로그래밍 아이디어입니다. "프로세스 지향"은 "레코드 지향" 프로그래밍 아이디어라고도 합니다. 이는 풍부한 "객체 지향" 기능(예: 상속, 다형성)을 지원하지 않으며 지속 상태와 도메인 논리의 혼합을 허용하지 않습니다.
은 문제를 해결하는 데 필요한 단계를 분석한 다음 함수를 사용하여 이러한 단계를 단계별로 구현하는 것입니다.
프로세스 지향의 중요한 장점
가독성
재사용성
유지관리성
테스트성
프로세스 지향이란 솔루션을 분석하고 찾는 것을 의미합니다. 문제를 해결한 다음 함수를 사용하여 이러한 단계를 단계별로 구현하세요.
객체 지향은 문제를 구성하는 트랜잭션을 개별 객체로 분해하는 것입니다. 객체를 설정하는 목적은 단계를 완료하는 것이 아니라 문제 해결의 전체 단계에서 무언가의 동작을 설명하는 것입니다. .
예를 들어 다음 예
객체지향에서는 문제를 단계가 아닌 기능별로 나누는 것을 분명히 볼 수 있습니다. 이는 체스 게임을 그리는 것이기도 합니다. 이러한 동작은 프로세스 지향 디자인에서 여러 단계로 분산되어 있으며 일반적으로 디자이너는 실제 상황을 고려하여 다양한 단순화를 하기 때문에 다양한 드로잉 버전이 나타날 가능성이 높습니다. 객체지향 디자인에서는 그림이 체스판 개체에만 나타날 수 있어 그림의 통일성이 보장됩니다.
클래스와 개체의 관계
객체: 객체는 사람들이 연구하고 싶은 모든 것뿐만 아니라 추상적인 규칙, 계획, 사건도 나타낼 수 있습니다. 객체에는 상태가 있으며 객체는 데이터 값을 사용하여 상태를 설명합니다. 객체에는 객체의 상태를 변경하는 데 사용되는 작업도 있습니다. 객체와 해당 작업은 객체의 동작입니다. 객체는 데이터와 연산의 결합을 실현하므로 데이터와 연산이 객체의 통일성 안에 캡슐화됩니다.
클래스: 동일한 특성(데이터 요소)과 동작(함수)을 가진 객체를 추상화한 것을 클래스라고 합니다. 따라서 객체를 추상화한 것이 클래스이고, 클래스를 구체화한 것이 객체이고, 클래스의 인스턴스가 객체이고, 클래스가 실제로는 데이터 유형이라고 할 수도 있습니다. 클래스에는 객체 상태의 추상화인 속성이 있으며 데이터 구조를 사용하여 클래스의 속성을 설명합니다. 클래스에는 작업 이름과 작업을 구현하는 메서드로 설명되는 개체 동작의 추상화인 작업이 있습니다.
객체와 클래스의 관계:
클래스와 객체의 관계는 틀과 주물의 관계와 같습니다. 클래스의 강인함의 결과는 객체이고, 객체의 추상화입니다. 객체는 클래스이고, 클래스 설명은 동일한 특성(속성)과 동일한 동작을 가진 객체 그룹입니다.
php 클래스의 멤버 속성과 멤버 메서드
클래스에서 정의한 메서드
<?php class phpClass { var $var1; var $var2 = "constant string"; function myfunc ($arg1, $arg2) { [..] } [..] } ?>rrree
참고: 클래스의 멤버 속성 앞에 수식어가 있어야 합니다. 선언 수식어를 사용하는 방법을 모르는 경우 var(키워드)를 사용할 수 있습니다. 다른 수정자는 var를 사용하지 마세요.
참고: 멤버 특성은 연산자, 변수, 메서드 또는 함수 호출이 포함된 표현식일 수 없습니다. 선언된 멤버 메서드는 개체와 관련되어야 하며 의미 없는 작업이 될 수 없습니다.
인스턴스화된 객체
클래스의 인스턴스화 형식은 다음과 같습니다. :
$Object name = 새 클래스 이름([매개변수]); // 클래스 인스턴스화: 클래스가 객체가 된다는 구문
· $Object 이름: 클래스 인스턴스화에 의해 반환된 개체 이름으로, 클래스의 메서드를 참조하는 데 사용됩니다.
· new: 새 객체가 생성됨을 나타내는 키워드입니다.
· 클래스 이름: 클래스의 이름을 나타냅니다.
· 매개변수: 지정된 클래스의 생성자 메소드를 사용하여 클래스의 값을 초기화합니다. 클래스에 정의된 생성자가 없으면 PHP는 자동으로 매개변수 없이 기본 생성자를 생성합니다.
new.php에서 제공하는 소스코드를 보면 객체를 어떻게 인스턴스화하고 접근하는지 명확하게 알 수 있습니다.
<?php class boy{ var $name ="jw"; var $age = "21"; var $sex = "男"; var $height = "182CM"; var $eye = "big"; //函数(成员方法) function zuofan(){ return "做饭<br>"; } function jiawu(){ return "家务<br>"; } }; ?>
-> 기호는 액세스 개체 이름 아래의 클래스를 나타냅니다.
특수 객체 참조 "this"입니다.
객체의 멤버인 한, 이 객체의 내부 및 메소드에 액세스하려면 이 객체를 사용해야 합니다.
<?php class boy{ //变量(成员属性) var $name ="jw"; var $age = "21"; var $sex = "男"; var $height = "182CM"; var $eye = "big"; //函数(成员方法) function zuofan(){ return "做饭<br>"; } function jiawu(){ return "家务<br>"; } } $boy1 = new boy(); $boy1->name = "张三"; $boy2 = new boy(); $boy2 ->name = "李四"; echo $boy1 -> sex."<br>"; echo $boy2 -> height."<br>"; ?>
생성자 메서드
생성자는 특별한 메서드입니다. 주로 객체를 생성할 때 객체를 초기화하는 데 사용됩니다. 즉, 객체 멤버 변수에 초기값을 할당하는 데 사용됩니다. 객체를 생성하는 문에서는 항상 new 연산자와 함께 사용됩니다.
1. 객체 생성 후 처음으로 자동 호출되는 메소드입니다(특수)
2. 메소드 이름은 특수하며 클래스 이름과 동일할 수 있습니다
3. 객체의 멤버에 초기값을 할당하는 데 사용됩니다.
<?php class boy{ //变量(成员属性) var $name ="jw"; var $age = "21"; var $sex = "男"; //函数(成员方法) public function zuofan(){ echo "{$this->name} 做饭<br>"; $this->jiawu(); } function jiawu(){ echo "家务<br>"; } } $boy1 = new boy(); $boy2 = new boy; $boy2 ->name = "李四"; $boy1->name = "张三"; $boy1->zuofan(); $boy2->zuofan(); ?>
파기 방법
반대로, 객체의 수명 주기가 종료되면(예: 객체가 위치한 함수가 호출됨) 시스템이 자동으로 소멸자를 실행합니다.
PHP 5에서는 다른 객체 지향 언어와 유사한 소멸자 개념을 도입했습니다. 구문 형식은 다음과 같습니다.
void __destruct ( void )
상속
PHP는 클래스를 상속하기 위해 확장 키워드를 사용합니다. PHP는 다중 상속을 지원하지 않습니다. 형식은 다음과 같습니다.
<?php
class Child는 Parent를 확장합니다. >속성에 대한 PHP 또는 메소드의 액세스 제어는 앞에 public, protected 또는 private 키워드를 추가하여 달성됩니다.
· 공개: 공개 클래스 구성원은 어디에서나 액세스할 수 있습니다.
public.php protected.php private.php를 보면 차이점을 확인할 수 있습니다
메소드 재작성메소드 오버로딩 (override)/coverage - 사용 시기: 부모 클래스는 모든 하위 클래스가 메서드를 사용해야 한다는 것을 알고 있지만 부모 클래스가 이 메서드를 작성하는 방법을 모르는 경우 메서드 오버로딩을 사용해야 합니다. 이때 하위 클래스가 이 메서드를 재정의하도록 할 수 있습니다. 인기 있는 예 - 부모 클래스(동물)는 자신의 하위 클래스(고양이와 개)가 짖을 수 있다는 것을 알고 있지만 이름이 다르기 때문에 부모 클래스는 이 메서드를 작성할 수 없으며 자식 클래스(고양이)만 짖도록 허용할 수 있습니다. 개)를 정의합니다. 코드는 다음과 같습니다:<?php class boy{ //变量(成员属性) var $name; var $age; var $sex; function __construct($name,$age,$sex="男"){ $this->name="$name"; $this->age="$age"; $this->sex="$sex"; } //函数(成员方法) public function zuofan(){ echo "{$this->name} 做饭<br>"; $this->jiawu(); } function jiawu(){ echo "家务<br>"; } } $boy1 = new boy("名字",28); $boy2 = new boy("名",26,"男"); $boy1->zuofan(); $boy2->zuofan(); ?>
인터페이스 인터페이스는 사람들이 상속할 수 있는 규정입니다. 이는 추상 클래스
에 정의된 메서드와 약간 비슷하지만 대신에 다른 클래스에서 이를 구현해야 하며 인터페이스를 구현해야 합니다. 예를 들어, 모든 메소드는 하나씩 정의됩니다.
인터페이스 Shop
{
public function buy($gid)
public function Sell($gid); );
}
shop 인터페이스 클래스를 선언하고 buy, sale 및 view의 세 가지 메소드를 정의합니다. 그런 다음 이 클래스를 상속하는 모든 하위 클래스는 이 세 가지 메소드를 구현해야 합니다. 이를 구현하지 않으면 작동하지 않습니다. 사실 인터페이스 클래스는 직설적으로 말하면 클래스의 템플릿이자 클래스의 규정이다. 이 범주에 속하면 내 규정 중 하나라도 빠지면 안 된다. 어떻게 하든 상관없습니다. <?php
class Animal{
public $name;
protected $price;
function cry(){
echo "不知道动物怎么叫";
}
}
class Dog extends Animal{
function cry(){
echo "汪汪...";
}
}
class Pig extends Animal{
function cry(){
echo "哼哼..."
}
}
?>
Constant
클래스에서 항상 변경되지 않는 값을 다음과 같이 정의할 수 있습니다. 상수. 상수를 정의하고 사용할 때 $ 기호를 사용할 필요가 없습니다. 상수의 값은 고정된 값이어야 하며 변수, 클래스 속성, 수학 연산의 결과 또는 함수 호출이 될 수 없습니다.<?php class BaseShop implements Shop { public function buy($gid) { echo('你购买了ID为 :'.$gid.'的商品'); } public function sell($gid) echo('你卖了ID为 :'.$gid.'的商品'); } public function view($gid) { echo('你查看了ID为 :'.$gid.'的商品'); } } ?>php에서::의 의미클래스에서 정적 메서드 및 정적 속성의 참조 메서드
예를 들어,
<?php class MyClass { const constant = '常量值'; function showConstant() { echo self::constant . PHP_EOL; } } echo MyClass::constant . PHP_EOL; $classname = "MyClass"; echo $classname::constant . PHP_EOL; // 自 5.3.0 起 $class = new MyClass(); $class->showConstant(); echo $class::constant . PHP_EOL; // 自 PHP 5.3.0 起 ?>는 Test::를 없이 직접 사용할 수 있습니다. $test 속성의 값을 얻기 위해 $test를 인스턴스화합니다.
정적 메서드 호출에도 동일합니다. Test::test() 정적 메서드를 직접 호출합니다.
추상 class
PHP 프로그래머에게 가장 어려운 점은 PHP 추상 클래스 적용입니다. 초보자로서 아직은 객체지향 지식을 활용해 프로그래밍할 준비가 되어 있지 않지만, 앞으로는 다양한 모듈 형식의 프로그램을 개발하기 위해 클래스를 사용하여 캡슐화하거나 인터페이스를 사용하는 것이 불가피할 것입니다. 자연어에서 우리는 추상적인 개념을 대상에 대한 큰 설명으로 이해하는데, 이는 특정 유형의 대상에 대한 공통 특성입니다. PHP에서도 마찬가지입니다. 클래스를 추상화할 때 클래스의 일반적인 동작을 나타낼 수 있습니다. 이 클래스는 하위 메서드가 구현해야 하는 일부 동작을 나타내는 템플릿이어야 합니다. PHP 추상 클래스 적용 정의: 추상 클래스 ClassName{}PHP 추상 클래스 적용 핵심 사항: 1. 일부 메소드를 정의하고 서브클래스는 이 추상화의 모든 메소드를 완전히 구현해야 합니다 2. 객체는 추상 클래스에서 생성될 수 없으며 그 의미는 확장됩니다 3. 일반적으로 추상 클래스 추상 메서드가 있고 메서드에 중괄호가 없습니다. PHP 추상 클래스 적용의 핵심 사항: 1. 추상 메서드는 특정 기능을 구현할 필요가 없으며 하위 클래스로 완성됩니다. 🎜>2. 하위 클래스에서 추상 클래스의 메서드를 구현할 때 해당 하위 클래스의 가시성은 추상 메서드의 정의보다 크거나 같아야 합니다.
3. 추상 클래스의 메서드 매개변수를 가질 수도 있고 비어 있을 수도 있습니다
4. 추상 메소드에 매개변수가 있는 경우 하위 클래스 구현에도 동일한 수의 매개변수가 있어야 합니다.
PHP 추상 클래스 적용 예:
abstract public function_name(); //중괄호가 없다는 점에 유의하세요
PHP 추상 클래스 규칙:
1. 클래스에 하나 이상의 추상 메서드가 포함되어 있으면 추상 클래스로 선언해야 합니다.
2. 추상 메서드, 아니요 함수 본문을 포함할 수 있습니다
3. 추상 클래스의 하위 클래스를 상속하고 추상 메서드를 구현하려면 추상 메서드와 동일하거나 낮은 액세스 수준을 가져야 합니다
4. 추상 클래스 클래스의 하위 클래스, 모든 추상 메서드가 구현되지 않으면 하위 클래스도 추상 클래스입니다
간단한 추상 클래스를 구현해 보겠습니다. 직사각형의 면적을 계산합니다. 이 직사각형은 모양 클래스에서 확장될 수 있습니다.
abstract.php 코드를 볼 수 있습니다
최종 키워드
클래스 상속을 원하지 않으면 final을 사용하여 이 클래스를 수정하세요. 이 클래스는 상속되지 않습니다.
final---클래스 및 메서드 이전에 사용됩니다.
최종 클래스---상속될 수 없습니다.
최종 방법---재정의할 수 없습니다.
최종 클래스는 상속할 수 없습니다.
클래스를 확장 불가능하게 만들고 싶을 때는 클래스 앞에 Final을 추가하여 클래스가 상속되지 않도록 할 수 있습니다.
정적 키워드
PHP 변수 범위의 또 다른 중요한 기능은 정적 변수입니다. 정적 변수는 로컬 함수 범위에만 존재하며 한 번만 초기화됩니다. 프로그램 실행이 이 범위를 벗어나면 해당 값은 사라지지 않으며 마지막 실행 결과가 사용됩니다.
PHP_EOL
줄 바꿈
부모 클래스 생성자 메서드
parent::__construct()를 호출합니다.
PHP는 하위 클래스의 생성자에서 상위 클래스의 생성자를 자동으로 호출하지 않습니다. 상위 클래스의 생성자를 실행하려면 하위 클래스의 생성자에서