개발 꿀팁/PHP

PHP 객체 지향 요점

Jammie 2022. 9. 19. 14:18
반응형

1 extends를 이용한 상속 및 중하중, 마술적 방법의 의미

class Bextends A

성명할 때 B에 A에 방법이 없을 수도 있고

불러올 때 $b=new B( );

$b->A에서의 방법();

$b->A의 속성 =1;

$b->B에 있는 방법();

$b->B에 있는 방법();

만약 $a=new A( );

됩니다.

$a->A에서의 방법();

$a->A의 속성 =1;

안 된다

$a->B에 있는 방법();

$a->B에 있는 방법();

오버로드:B는 A를 상속받으며, B에서는 A와 같은 이름을 가진 메서드 속성을 구현합니다.

PHP에서의 "중하중"은 다른 절대다수 객체 지향 언어와 다르다.. 기존의 "오버로드"는 동일한 이름을 가진 여러 클래스 메서드를 제공하는 데 사용되었지만, 각 메서드는 매개 변수의 유형과 개수가 다릅니다.



마술방법:PHP는 모든 것을 __(밑줄 두 개)로 시작한다.요술을 요술로 삼다.그러므로 당신은 자신의 클래스 메소드를 정의할 때 ___을 접두사로 사용하지 마십시오.





2 private와 protected로 접근 상속수식자 가시성

속성 메서드 private는 상속되지 않습니다

속성 메서드 protected 클래스는 외부에서 볼 수 없으며 이어받을 수 있습니다잇다

속성 메서드 public에 정의된 클래스 멤버는 아무거나 사용할 수 있습니다지방 방문



3 php에서 이중 콜론:: 응용 프로그램

php 클래스 코드에서 자주 볼 수 있는 "::" 연산자, 이것은 작용이다.도메인 한정 연산자는 이중 콜론 "::"로 표현되며, 이 연산자는 클래스 내 다른 역할 도메인의 수준을 맨 위로 이동시키는 데 사용됩니다.왼쪽은 작용역 오른쪽은 작용역에 접근하는 구성원이다.

php에서 정의된 작용역은 self와 parent 둘이다.종(php6에서 static 작용역을 제공함)



범위 분석 연산자 (Paamayim Ne라고도 함)kudotayim) 또는 더 쉽게 말하면, 정적 멤버, 메서드 및 상수 접근에 사용할 수 있는 콜론 쌍이며, 하위 클래스가 상위 클래스 내의 멤버 및 메서드를 덮어쓸 수 있습니다

class MyClass {
    const CONST_VALUE = 'A constant value';
}

echo MyClass::CONST_VALUE;

class OtherClass extends MyClass
{
    public static $my_static = 'static var';

    public static function doubleColon() {
        echo parent::CONST_VALUE . "\n";
        echo self::$my_static . "\n";
    }
}

OtherClass::doubleColon();

//하위 클래스가 상위 클래스 덮어쓰기하위 클래스가 상위 클래스 덮어쓰기

class MyClass
{
    protected function myFunc() {
        echo "MyClass::myFunc()\n";
    }
}

class OtherClass extends MyClass
{
    // 상위 클래스의 메서드 덮어쓰기
    public function myFunc()
    {
        // 덮어쓴 메서드를 불러올 수 있습니다
        parent::myFunc();
        echo "OtherClass::myFunc()\n";
    }
}

$class = new OtherClass();
$class->myFunc();

4 php에서 this와 self 그리고 parent의 작용

this: 현재 개체 인스턴스를 가리키는 포인터입니다. 다른 쌍을 가리키지 않습니다.상이나 부류.

self: 현재 클래스의 도메인입니다. this와 다른 점은 표가 아닙니다.클래스 이외의 코드에서 self를 사용할 수 없고 인식할 수 없는 클래스의 특정 인스턴스자신이 상속의 중간위치에 있지 마라.즉, 확장 클래스에서 self를 사용할 때 상위 클래스가 아닌 확장 클래스의 오버로드 방법을 호출한다.self는 클래스 자체, 즉 self는 인스턴스화된 어떤 객체도 가리키지 않으며, 일반적으로 self는 클래스의 정적 변수를 가리킬 때 사용한다.

private static $firstCount = 0;
private $lastCount;

// 생성자
function __construct( )
{
$this->lastCount = ++self: $firstCount; // self 사용정적 변수를 호출하려면 다음과 같이 하십시오. (도메인 연산 기호)
}
parent: 현재 클래스의 부모 역할을 나타내는 도메인, 나머지는 self입니다.특성이 같습니다. parent는 부모에 대한 포인터로 일반적으로 parent를 사용합니다.부모 클래스의 생성자를 불러옵니다.

// 상속 클래스의 생성자
function __construct( $personSex, $personAge)
{
parent::_construct ( "test" ); // parent를 사용하여 부모 클래스 생성자를 호출함
$this->personSex = $personSex;
$this->personAge = $personAge
}

5 구조함수와 석조함수

구조함수가 있는 클래스는 매번개체를 만들 때 이 메서드를 호출하므로 개체를 사용하기 전에 초기화 작업을 수행하는 데 적합합니다.

function_construct( ) {}
만약 서브클래스에 생성자가 정의되어 있다면부모 클래스의 생성자를 몰래 호출하지 않습니다.부모 클래스의 생성자를 실행하려면 하위 클래스의 생성자에서 parent를 호출해야 합니다::__construct().

PHP 5 구문 분석함 도입수의 개념은 C++와 같은 객체 지향 언어들과 유사하다.구문 분석 함수는 오브젝트에 대한 모든 참조를 삭제하거나 삭제합니다.대상이 명시적으로 파기된 경우 수행합니다.

function __destruct( ) {}



6 final 키워드

PHP 5가 하나 추가되었습니다 final 키워드.부모 클래스의 메서드가 final로 선언되면 하위 클래스는 메서드를 덮어쓸 수 없습니다. 만약 클래스가 선언되면final이면 상속받을 수 없다.



7 이음

표준 클래스를 정의하는 것과 같은 인터페이스를 interface로 정의할 수 있다.

주의:

1)그러나 그 안에 정의되어 있는 모든 방법은 비어 있다.

2)인터페이스에 정의된 모든 메서드는 public이어야 합니다. 이것은 인터페이스의 특성입니다.

3)여러 인터페이스를 구현할 때 인터페이스의 메서드는 이름을 바꿀 수 없습니다.

4)extends 연산자를 사용하여 인터페이스를 상속할 수도 있습니다.

5)인터페이스에서도 정수를 정의할 수 있다.인터페이스 상수와 클래스 상수의 사용은 완전히 동일하다. 그것들은 모두 일정한 값이라 맞을 수 없다하위 클래스 또는 하위 인터페이스를 수정합니다

 

   

// 'iTemplate' 인터페이스를 선언합니다
interface iTemplate
{
    public function setVariable($name, $var);
    public function getHtml($template);
}

// 구현 인터페이스
// 아래의 글씨가 정확하다
class Template implements iTemplate
{
    private $vars = array();
  
    public function setVariable($name, $var)
    {
        $this->vars[$name] = $var;
    }
  
    public function getHtml($template)
    {
        foreach($this->vars as $name => $value) {
            $template = str_replace('{' . $name . '}', $value, $template);
        }
 
        return $template;
    }
}

8 속성

클래스의 변수 멤버를 속성이라고 합니다. 속성 선언은 키워드 public 또는 protected 또는 private로 시작하여 변수를 포함합니다. 속성의 변수는 초기화할 수 있지만, 초기화된 값은 반드시 상수여야 합니다. 여기서 상수는 php 스크립트가 컴파일 단계일 때 상수가 되는 것이지 컴파일 단계 이후 실행 단계에서 연산된 상수가 아닙니다.

PHP5에서 두 함수 "_get( )" 와 "_set( )" 를 미리 정의하여 가져옵니다.
속성 및 속성 검사용 "_isset( )"과 속성 삭제 방법 "_unset( )"을 취하여 부여한다.

간단히 말해서, 하나는 값을 취하고 하나는 값을 매깁니다. "_set( )" 와 "_get( )" 이 두 가지 방법은 기본적으로 존재하는 것이 아니라, 우리가 수동으로 클래스에 추가하는 방법입니다. 구조 방법(_construct())과 같이 클래스에 추가되어야 존재합니다. 다음과 같은 방식으로 두 가지 방법을 추가할 수 있습니다. 물론, 개인의 스타일대로도 사용할 수 있습니다.추가: //_get() 메서드를 사용하여 개인 속성을 가져옵니다

<?php
클래스 퍼son{
//다음은 사람의 멤버입니다속성
private $name; // 사람 이름
private $sex; // 사람의 성별
private $age; // 사람의 나이
//__get()메서드는 개인 속성을 가져오는 데 사용됩니다.
private function __get($pr)operty_name){
if(isset)$this->$property_name){
return($t)his->$property_name)}else {
return(NU)LL);
}
}
}
//__set()메서드는 개인 속성을 설정하는 데 사용됩니다.
private function_set($pr)operty_name, $value){
$this->$property_name = $value;
}
//__isset()방법
private function __isset($)nm){
echo "isset() 함수가 개인 멤버를 측정할 때 자동 조정쓰다
return isset($this->$nm);
}
//__unset()방법
private function __unset($)nm){
echo "당재류"외부에서는 unset() 함수를 사용하여 개인을 삭제합니다멤버가 있을 때 자동으로 호출되는 <br>;
unset($th)is->$nm)
}
}
$p1=new Person();
$p1->Name="this is a person"n name;
// isse 사용t() 함수가 개인 멤버를 측정할 때 자동으로 호출됨__isset() 방법은 우리를 도와 완성한다., 결과가 true로 반환됨
에코바_dump(isset($p1->n)ame)."br>
echo $p1-name.
// unse 사용t( ) 함수가 개인 멤버를 삭제할 때 자동으로 호출됨__unset() 방법이 우리를 도와 완성한다.,Name 개인 속성 삭제
unset($p1->name);
//삭제되었습니다. 이 업종은 수출할 수 없다
echo $p1->name;
?>

9클론

객체 복사는 clone 키워드를 통해 수행할 수 있습니다(객체에 __clone() 메서드가 있는 경우 먼저 호출됩니다).객체의 __clone() 메서드는 직접 호출할 수 없습니다.

객체가 복사되면 PHP5는 객체의 모든 속성에 대해 "shallow copy"를 수행합니다.모든 속성의 인용은 원래의 변수를 가리키며 변하지 않는다._clone() 메서드를 정의하면 새로 생성된 개체( 복사된 개체)의 _clone() 메서드가 호출됩니다. 속성 값을 수정하는 데 사용할 수 있습니다

 

반응형