복붙노트

PHP 클래스 란 무엇입니까?

PHP

PHP 클래스 란 무엇입니까?

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

해결법

  1. ==============================

    1.간단히 말해, 클래스는 객체의 청사진입니다. 또한 개체는 개념적으로 관련된 상태와 책임을 응용 프로그램에 캡슐화하고 일반적으로 이러한 프로그래밍 인터페이스와 상호 작용할 수있는 프로그래밍 인터페이스를 제공합니다. 이렇게하면 코드 재사용이 촉진되고 유지 관리가 향상됩니다.

    간단히 말해, 클래스는 객체의 청사진입니다. 또한 개체는 개념적으로 관련된 상태와 책임을 응용 프로그램에 캡슐화하고 일반적으로 이러한 프로그래밍 인터페이스와 상호 작용할 수있는 프로그래밍 인터페이스를 제공합니다. 이렇게하면 코드 재사용이 촉진되고 유지 관리가 향상됩니다.

    잠금 장치를 상상해보십시오.

    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;
        }
    }
    

    네임 스페이스, 개인 및 공개 선언은 지금 무시하십시오.

    Lock 클래스는 애플리케이션의 모든 잠금에 대한 청사진입니다. 잠금은 $ isLocked 속성으로 표시된 잠금 또는 잠금 해제 중 하나 일 수 있습니다. 이 두 상태 만 가질 수 있으므로 부울 (true 또는 false)을 사용하여 어떤 상태가 적용되는지 나타냅니다. 잠금 방법과 잠금 해제 방법을 통해 잠금과 상호 작용할 수 있습니다. 그러면 상태가 그에 따라 변경됩니다. isLocked 메서드는 Lock의 현재 상태를 알려줍니다. 이제이 청사진에서 객체 (또는 인스턴스라고도 함)를 만들면 고유 한 상태 (예 :

    $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
    

    각 객체 / 인스턴스는 자신의 상태를 캡슐화하기 때문에 첫 번째 잠금은 잠긴 상태로 유지됩니다

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

    이제 Lock을 잠금 또는 잠금 해제 상태로 유지하는 전체 책임은 Lock 클래스 내에 포함됩니다. 당신은 무언가를 잠그고 싶을 때마다 그것을 다시 만들 필요가 없습니다. 그리고 당신이 어떻게 작동 하는지를 바꾸고 싶다면 Lock의 청사진에서 이것을 바꿀 수 있습니다. 문:

    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 객체를 할당 할 수 있습니다. Lock 객체는 잠금 또는 잠금 해제의 모든 책임을 처리하므로 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);
    

    $ quantumLock을 unlock () 시키면 Door와 Chest가 잠금 해제됩니다.

    Quantum Locks가 나쁜 예라고 인정하는 동안, 그것은 모든 곳에서 국가와 책임을 재건하는 대신에 물체를 공유하는 개념을 설명합니다. 실세계 예제는 데이터베이스를 사용하여 클래스에 전달하는 데이터베이스 객체 일 수 있습니다.

    위의 예에서는 가슴이나 문 잠금으로 이동하여 lock () 및 unlock () 메서드를 사용하는 방법을 보여주지 않습니다. 나는 너를 운동 (또는 다른 누군가를 추가)하기위한 운동으로 남겨 둔다.

    또한 $ this 위에 자기를 사용할 때를 체크하시오. 클래스와 객체에 대한 심층적 인 설명과 함께 사용하는 방법

    추가 리소스 확인을 위해

  2. ==============================

    2.나는 당신이 자원이 아니라 설명을 요구했다는 것을 알고 있습니다. 그러나 여기에는 클래스의 기본 구현을 이해 한 내용이 있습니다 :

    나는 당신이 자원이 아니라 설명을 요구했다는 것을 알고 있습니다. 그러나 여기에는 클래스의 기본 구현을 이해 한 내용이 있습니다 :

    클래스를 건물의 템플릿으로 상상해보십시오. 건물이 어떻게 보일 것인가에 대한 기본적인 스케치. 실제로 빌드 할 때 클라이언트가 원하는 것처럼 보이도록 (클래스의 경우 속성) 일부 내용이 변경됩니다. 이제 건물 안의 것들이 어떻게 행동 할 것인지를 디자인해야합니다 (메소드). 간단한 예를 들어 설명하겠습니다.

    빌딩 강의 :

    /**
     * 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( );
    

    그냥 복사하여 로컬 호스트에서 실행하고 몇 가지 변경을 시도하십시오. 질문이 있으시면 저에게 물어보십시오. 이 기능이 유용하지 않다면 이전 포스터의 링크를 사용하십시오.이 링크는 매우 견고한 자습서입니다.

  3. ==============================

    3.내가 (개인적인 경험을 바탕으로) 기쁘게한다면 다른 각도에서 바라 보는 시각을 제공한다. 당신은 실제로 그것이 무엇인지 완전히 이해할 수 있기 전에 "OOP의 필요성"을 느낄 필요가 있습니다. IMHO, 학습 자원은이 후에 나옵니다.

    내가 (개인적인 경험을 바탕으로) 기쁘게한다면 다른 각도에서 바라 보는 시각을 제공한다. 당신은 실제로 그것이 무엇인지 완전히 이해할 수 있기 전에 "OOP의 필요성"을 느낄 필요가 있습니다. IMHO, 학습 자원은이 후에 나옵니다.

    하나는 기본적으로 절차 적 스타일로 작성된 상대적으로 큰 소프트웨어를 작성할 때 구조적 어려움에 빠져 있어야 할 필요가 있습니다 (객체 지향적 인 사람과 반대되는 사람, 용어에 동의하지 않으면 유감스럽게 생각합니다). 그때까지 그는 코드를 객체로 재구성하여 객체를보다 잘 구성하고 자연스럽게 OOP에 대해 자세히 배울 수 있습니다. 다시 말하지만, 이것은 제 개인적인 경험이며 어떤 책보다도 빨리 이해하게되었습니다.

    그냥 내 두 센트.

  4. from https://stackoverflow.com/questions/2206387/what-is-a-class-in-php by cc-by-sa and MIT license