source

PHP의 클래스는 무엇입니까?

ittop 2023. 10. 19. 22:46
반응형

PHP의 클래스는 무엇입니까?

저는 책에서 PHP 수업을 이해하는 데 심각한 문제가 있습니다.매우 어려워 보입니다.그들의 목적은 무엇이며 어떻게 작동합니까?

간단히 말해서 클래스는 개체에 대한 청사진입니다.그리고 개체는 응용 프로그램에서 개념적으로 관련된 상태 및 책임을 캡슐화하고 일반적으로 이러한 것들과 상호 작용할 수 있는 프로그래밍 인터페이스를 제공합니다.이를 통해 코드 재사용이 촉진되고 유지보수성이 향상됩니다.


자물쇠 상상하기:

namespace MyExample;

class Lock
{
    private $isLocked = false;

    public function unlock()
    {
        $this->isLocked = false;
        echo 'You unlocked the Lock';
    }
    public function lock()
    {
        $this->isLocked = true;
        echo 'You locked the Lock';
    }
    public function isLocked()
    {
        return $this->isLocked;
    }
}

무시합니다.namespace,private그리고.public지금 바로 신고.

잠금 클래스는 응용프로그램의 모든 잠금에 대한 청사진입니다.잠금은 잠글 수도 있고 잠글 수도 있으며 속성으로 표시됩니다. $isLocked. 이 두 가지 상태만 가질 수 있기 때문에 부울을 사용합니다.true아니면false적용되는 상태를 나타냅니다.그 방법을 통해 잠금장치와 상호작용할 수 있습니다. lock그리고.unlock, 그에 따라 상태가 바뀔 겁니다isLockedmethod는 나에게 lock의 현재 상태를 알려줄 것입니다.이제 이 Blueprint에서 개체(인스턴스라고도 함)를 생성하면 개체가 고유 상태를 캡슐화합니다.

$aLock = new Lock; // Create object from the class blueprint
$aLock->unlock();  // You unlocked the Lock
$aLock->lock();    // You locked the Lock

다른 잠금 장치를 만들고, 그 자체의 상태를 캡슐화하는 겁니다.

$anotherLock = new Lock;
$anotherLock->unlock(); // You unlocked the Lock

그러나 각 개체/instance가 자신의 상태를 캡슐화하기 때문에 첫 번째 잠금은 잠금 상태로 유지됩니다.

var_dump( $aLock->isLocked() );       // gives Boolean true
var_dump( $anotherLock->isLocked() ); // gives Boolean false

이제 잠금 또는 잠금 해제를 유지해야 하는 모든 책임이 잠금 클래스 내에 포함됩니다.무언가를 잠그고 싶을 때마다 다시 만들 필요는 없으며, 잠금의 작동 방식을 변경하려면 모든 클래스에 잠금이 있는 대신 잠금의 Blueprint에서 이를 변경할 수 있습니다(예: 문:

class Door
{
    private $lock;
    private $connectsTo;

    public function __construct(Lock $lock)
    {
        $this->lock = $lock;
        $this->connectsTo = 'bedroom';
    }
    public function open()
    {
        if($this->lock->isLocked()) {
            echo 'Cannot open Door. It is locked.';
        } else {
            echo 'You opened the Door connecting to: ', $this->connectsTo;
        }
    }
}

이제 Door 객체를 만들 때 Lock 객체를 할당할 수 있습니다.잠금 개체는 잠금 또는 잠금 해제 여부에 대한 모든 책임을 처리하기 때문에 문은 이 문제에 신경 쓸 필요가 없습니다.사실 잠금을 사용할 수 있는 물체는 신경 쓸 필요가 없을 것입니다. 예를 들어, 상자

class Chest
{
    private $lock;
    private $loot;

    public function __construct(Lock $lock)
    {
        $this->lock = $lock;
        $this->loot = 'Tons of Pieces of Eight';
    }
    public function getLoot()
    {
        if($this->lock->isLocked()) {
            echo 'Cannot get Loot. The chest is locked.';
        } else {
            echo 'You looted the chest and got:', $this->loot;
        }
    }
}

보다시피, 체스트의 책임은 문의 책임과 다릅니다.상자에는 전리품이 들어있고, 문에는 방이 따로 있습니다.잠금 또는 잠금 해제 상태를 두 클래스로 코드화할 수 있지만 별도의 잠금 클래스를 사용하면 잠금을 다시 사용할 필요도 없고 재사용할 수도 있습니다.

$doorLock = new Lock;
$myDoor = new Door($doorLock);

$chestLock = new Lock;
$myChest new Chest($chestLock);

이제 체스트 앤 도어는 각각의 독특한 자물쇠를 가지게 되었습니다.양자물리학처럼 여러 곳에 동시에 존재할 수 있는 마법의 자물쇠라면 가슴과 문 양쪽에 동일한 자물쇠를 할당할 수 있습니다.

$quantumLock = new Lock;
$myDoor = new Door($quantumLock);
$myChest new Chest($quantumLock);

그리고 당신이unlock()$quantumLock, 도어와 체스트 모두 잠금이 해제될 것입니다.

퀀텀 록이 나쁜 예라고 인정하지만, 이는 국가와 책임을 재건하는 대신 사물을 공유한다는 개념을 곳곳에 잘 보여줍니다.실제 예제는 데이터베이스를 사용하여 클래스에 전달하는 데이터베이스 개체가 될 수 있습니다.

위의 예는 사용하기 위해 상자 또는 문을 잠그는 방법을 보여주지 않습니다.lock()그리고.unlock()방법들 )이것은 당신이 운동을 하기 위한 연습(또는 추가할 다른 사람)으로 남겨둡니다.

또한 $this 이상의 셀프 사용 시기를 확인합니다.클래스 및 객체에 대한 보다 심도 있는 설명과 이를 활용하는 방법

일부 추가 리소스 확인

설명이 아닌 자료를 요구하신 것은 알지만, 수업의 기본적인 구현을 이해한 것은 다음과 같습니다.

수업을 건물의 템플릿으로 상상해 보세요.건물이 어떻게 생겨야 하는지에 대한 기본적인 스케치.실제로 빌드할 때는 클라이언트가 원하는 것처럼 보이도록 몇 가지 사항을 변경합니다(클래스의 경우 속성).이제 여러분은 건물 안의 사물들이 어떻게 작용할 것인지 (방법) 설계해야 합니다.간단한 예를 들어 보여드리겠습니다.

빌딩 클래스:

/**
 * Constructs a building.
 */
class Building
{
    private $name;
    private $height;


    public function __construct( $name, $height )
    {
        $this->name = $name;
        $this->height = $height;
    }

    /**
     * Returns name of building.
     * 
     * @return string
     */
    public function getName( )
    {
        return $this->name;
    }


    public function elevatorUp( )
    {
        // Implementation
    }


    public function elevatorDown( )
    {
        // Implementation
    }


    public function lockDoor( )
    {
        // Implementation
    }
}

클래스 호출:

// Empire State Building
$empireStateBuilding = new Building( "Empire State Building", 381 );

echo $empireStateBuilding->getName( );
$empireStateBuilding->lockDoor( );


// Burj Khalifa
$burjKhalifa = new Building( "Burj Khalifa", 828 );

echo $burjKhalifa->getName( );
$burjKhalifa->lockDoor( );

복사만 하고 로컬 호스트에서 실행한 후 몇 가지 변경 사항을 수행해 보십시오.질문이 있으면 저에게 물어보세요.이 방법이 유용하지 않다면 이전 포스터의 링크를 사용하면 됩니다. 꽤나 견고한 튜토리얼입니다.

제가 원한다면 다른 각도에서 볼 수 있도록 하기 위해서입니다. (개인적인 경험에 근거로)"OOP의 필요성"을 느껴야 실제로 무엇에 대한 것인지 이해할 수 있습니다. - IMHO, 학습 자원은 이 다음에 와야 합니다.

프로시저 스타일로 작성된 비교적 큰 소프트웨어를 작성할 때 기본적으로 구조적인 어려움에 빠질 필요가 있습니다(객체 지향성과는 반대로, 이 용어에 동의하지 않는 사람이 있다면 죄송합니다)그때가 되면, 그는 코드를 더 잘 정리하기 위해 객체로 재구성을 시도할 수 있고, 자연스럽게 OOP에 대해 더 자세히 배울 수 있습니다.다시 말하지만, 이것은 저의 개인적인 경험이고 그것은 그 어떤 책보다도 저를 더 빨리 이해하게 했습니다.

단돈 2센트.

계급은 물체의 청사진입니다.카리스 클래스의 이름이 있습니다.우리는 수업에서 변수와 방법을 정의합니다.클래스는 곱슬곱슬한 괄호로 정의됩니다.곱슬곱슬한 가새 안에서 변수, 방법, 특성 및 함수를 정의할 수 있습니다.기능과 방법 둘 다 동일합니다.방법을 정의할 수 있으며 변수는 요구 사항에 따라 곱슬곱슬한 가새 클래스입니다.

클래스카

}

각각에 대해(get_declared_classes()를 $class로 획득){

echo ($class)."<br>";

}

get_declared_classes()는 php에서 미리 정의된 함수입니다.선언된 클래스의 이름 배열을 반환합니다.

enter image description here

언급URL : https://stackoverflow.com/questions/2206387/what-is-a-class-in-php

반응형