PHP의 객체. 객체 PHP에서 객체 생성하기




사물

객체는 객체지향 프로그래밍의 기본 개념 중 하나입니다.

객체는 변수이며, 그 인스턴스는 다음과 같은 특수 템플릿을 사용하여 생성됩니다. 수업. 객체와 클래스의 개념은 객체지향 프로그래밍(OOP) 패러다임의 필수적인 부분입니다.

객체는 데이터(속성)와 이를 처리하기 위한 함수(메서드)의 모음입니다. 데이터와 메서드를 클래스 멤버라고 합니다. 일반적으로 객체는 캡슐화를 지원하는 모든 것입니다.

개체의 내부 구조는 대괄호 대신 -> 연산자를 사용하여 개별 요소 및 함수에 액세스한다는 점을 제외하면 해시와 유사합니다.

객체를 초기화하려면 변수에 객체의 인스턴스를 생성하는 new 표현식을 사용하세요.

클래스 foo
{
함수 do_foo()
{
echo "foo 하는 중입니다." ;
}
}

$bar = 새로운 foo ;
$bar -> do_foo();
?>

객체 내에서 데이터와 코드(클래스 멤버)는 공개되거나 공개되지 않을 수 있습니다. 공용 데이터와 클래스 멤버는 객체의 일부가 아닌 프로그램의 다른 부분에서 액세스할 수 있습니다. 그러나 개인 데이터와 클래스 멤버는 이 개체 내에서만 사용할 수 있습니다.

PHP의 클래스 설명은 함수 단어로 시작됩니다. 수업:

클래스 클래스명(
// 클래스 멤버 설명 - 이를 처리하기 위한 데이터 및 메서드
}

발표용 물체연산자를 사용해야 합니다 새로운:

개체 = 새 클래스 이름;

데이터는 var 기능어를 사용하여 설명됩니다. 방법은 일반 함수와 동일하게 설명됩니다. 메소드에 매개변수를 전달할 수도 있습니다.

PHP의 예제 클래스:

// 새로운 Coor 클래스를 생성합니다:
클래스 쿠어(
// 데이터(속성):
var$이름;
var $addr;

// 메소드:
함수 이름() (
에코 "

남자

" ;
}

}

// 만들다 객체 Coor 클래스:
$객체 = newCoor;
?>

PHP에서 클래스와 객체에 접근하기

클래스가 어떻게 설명되고 객체가 생성되는지 살펴보았습니다. 이제 클래스의 멤버에 접근해야 합니다. 이를 위해 PHP에는 연산자가 있습니다. -> . 예는 다음과 같습니다.

// 새로운 Coor 클래스를 생성합니다:
클래스 쿠어(
// 데이터(속성):
var$이름;

// 메소드:
함수 Getname() (
에코 "

남자

" ;
}

}


$객체 = newCoor;
// 클래스 멤버에 대한 액세스를 얻습니다:
$object -> 이름 = "알렉스" ;
에코 $객체 -> 이름 ;
// "Alex"를 인쇄합니다.
// 이제 클래스 메서드(사실 클래스 내부의 함수)에 액세스해 보겠습니다.
$객체 -> Getname();
// "John"을 대문자로 인쇄합니다.
?>

클래스 내의 클래스 멤버에 액세스하려면 포인터를 사용해야 합니다. $this, 항상 현재 개체를 참조합니다. 수정된 방법 이름 가져오기():

함수 Getname() (
echo $this->이름;
}

같은 방법으로 메소드를 작성할 수 있습니다. 설정이름():

함수 Setname($name) (
$this->이름 = $이름;
}

이제 이 방법을 사용하여 이름을 변경할 수 있습니다. 설정이름():

$object->Setname("피터");
$object->Getname();

전체 코드 목록은 다음과 같습니다.

// 새로운 Coor 클래스를 생성합니다:
클래스 쿠어(
// 데이터(속성):
var$이름;

// 메소드:
함수 Getname() (
echo $this -> 이름 ;
}

함수 Setname($name) (
$this -> 이름 = $name ;
}

}

// Coor 클래스의 객체를 생성합니다:
$객체 = newCoor;
// 이제 이름을 변경하려면 Setname() 메서드를 사용합니다.
$object -> Setname("닉");
// 액세스를 위해 이전과 마찬가지로 Getname():
$객체 -> Getname();
// 스크립트는 "Nick"을 인쇄합니다.
?>

바늘 $this데이터 액세스뿐만 아니라 메서드에 액세스하는 데에도 사용할 수 있습니다.

함수 Setname($name) (
$this->이름 = $이름;
$this->Getname();
}

객체 초기화 중

때로는 개체를 초기화하여 개체의 속성을 초기 값에 할당해야 하는 경우도 있습니다. 클래스 이름이 Coor이고 여기에 사람 이름과 거주 도시라는 두 가지 속성이 포함되어 있다고 가정해 보겠습니다. 예를 들어 객체를 초기화하는 메서드(함수)를 작성할 수 있습니다. 초기화():

// 새로운 Coor 클래스를 생성합니다:
클래스 쿠어(
// 데이터(속성):
var$이름;
var $도시;

// 초기화 방법:
함수 초기화($name) (
$this -> 이름 = $name ;
$ this -> city = "런던" ;
}

}

// Coor 클래스의 객체를 생성합니다:
$객체 = newCoor;
// 객체를 초기화하려면 즉시 메서드를 호출합니다.
$객체 -> 초기화();
?>

가장 중요한 것은 객체를 생성한 후 즉시 함수를 호출하거나 생성 사이에 일부 메서드를 호출하는 것을 잊지 않는 것입니다(연산자). 새로운) 객체 및 해당 초기화(호출 초기화).

객체가 생성될 때 특정 메소드가 자동으로 호출되어야 한다는 것을 PHP가 알기 위해서는 클래스와 동일한 이름을 지정해야 합니다( 쿠어):

함수 좌표($name)
$this->이름 = $이름;
$this->city = "런던";
}

객체를 초기화하는 메서드를 생성자라고 합니다. 그러나 PHP에는 스크립트가 종료될 때 리소스가 자동으로 해제되므로 소멸자가 없습니다.

개체로 변환

개체가 개체로 변환되면 수정되지 않습니다. 다른 유형의 값이 객체로 변환되면 내장 클래스 stdClass의 새 인스턴스가 생성됩니다. 값이 비어 있으면 새 인스턴스도 비어 있게 됩니다. 다른 값의 경우 스칼라 멤버 변수에 포함됩니다.

PHP 포털 포럼. S.U.

객체는 함수와 비슷하지만 훨씬 더 복잡합니다. 객체는 하나의 이름으로 통합된 여러 함수와 변수의 모음이라고 할 수 있습니다.

객체가 무엇인지 이해하는 가장 쉬운 방법은 예제를 사용하는 것이지만 여기서는 먼저 약간의 인내심을 갖고 이론을 숙지해야 합니다.

사실 객체는 클래스를 기반으로 생성되며 클래스는 프로그래머가 직접 작성할 수도 있고 다른 프로그래머가 작성한 클래스로 작업할 수도 있습니다.

이제 클래스를 만들어 보겠습니다.

Class TestClass ( //클래스의 본문입니다. )

PHP에서는 클래스라는 단어를 사용하여 클래스를 선언합니다. 클래스 이름은 대소문자를 구분합니다.

빈 클래스는 의미가 없으므로 클래스에 뭔가를 추가해 보겠습니다. 클래스에는 변수와 함수가 포함될 수 있습니다. 변수는 클래스 속성이라고 하며, 함수는 메서드입니다.

클래스 TestClass ( public $message = "Hi!"; function sayHello() ( echo "Hello!"; ) )

변수 선언 앞에 public이라는 단어가 표시되는데, 이는 속성 범위에 대한 정의입니다. 영어에서 public은 공개를 의미하므로 이름에서 이 클래스 속성이 공개적으로 사용 가능하다는 것이 분명합니다. 범위에 대해서는 나중에 더 자세히 설명하겠습니다. 지금은 인내심을 갖고 현재 이론을 검토해 보세요.

이제 TestClass 클래스에는 "Hi!"라는 값을 가진 $message 변수가 있습니다. 이 변수는 클래스의 속성이고, 클래스의 메서드인 sayHello 함수가 있습니다.

그래서 우리는 수업이 있습니다. 이제 이를 기반으로 new 연산자를 이용하여 객체를 생성해보겠습니다.

클래스 TestClass ( public $message = "Hi!"; function sayHello() ( echo "Hello!"; ) ) $govorilka = new TestClass();

우리의 객체는 클래스의 복사본과 같습니다.

다음 단계는 객체를 사용하는 것입니다. 개체의 속성과 메서드에 액세스하려면 -> 연산자를 사용합니다.

$govorilka 개체의 $message 속성에 액세스하려면 $govorilka->message를 작성하면 됩니다. 더 이상 메시지 속성 이름 앞에 $ 기호를 붙이지 않습니다.

메소드는 같은 방식으로 접근하지만, 정규 함수를 다루기 때문에 메소드 끝에 괄호를 잊어서는 안 됩니다.

다음은 우리가 만든 객체의 속성과 메서드에 액세스하는 예입니다.

메시지; 에코 "
"; $govorilka->sayHello();

속성 값을 변경할 수 있습니다.

message = "안녕하세요."; echo $govorilka->메시지; 에코 "
"; $govorilka->sayHello();

하나의 클래스를 기반으로 원하는 만큼 객체를 생성할 수 있습니다.

message = "안녕하세요."; echo $govorilka->메시지; 에코 "
"; $govorilka->sayHello(); 에코 "
"; // 두 번째 객체 생성 $govorilka2 = new TestClass(); echo $govorilka2->message;

보시다시피 $govorilka 객체의 속성을 변경해도 TestClass 클래스의 속성은 변경되지 않았으며 두 번째 객체는 인스턴스인 클래스에 해당합니다.

객체는 클래스의 인스턴스라고 불리는 경우가 많으므로 해당 용어를 기억해 두는 것이 좋습니다.

이 모든 것, 이러한 클래스, 객체가 왜 필요한지는 아직 완전히 명확하지 않습니다. 좀 더 현실적인 클래스를 만들고 그 예제를 사용하여 계속 작업해 보겠습니다.

\"$this->이름\"을 입력하세요. 설명: $this->설명. 가격: $this->price"; ) ) $Goods = 새 상품(); $Goods->printGoods();

$this 의사 변수에 주목하세요. 이는 코드 내의 클래스 속성에 액세스하는 데 사용되는 PHP의 예약된 변수입니다.

즉, 자체 메소드에서 Goods 클래스의 $name 속성에 액세스하기 위해 $this->name 구성을 사용했습니다.

이제 예제를 조금 확대해 보겠습니다. 더 복잡하다고 말하기는 어렵습니다. 그래서:

유형. 이름: \"$this->이름\". 설명: $this->설명. 가격: $this->price."; ) ) $Goods = new Goods(); $Goods->type = "책"; $Goods->name = "전쟁과 평화"; $Goods->description = "뚱뚱함 여러 권의 책"; $Goods->price = "543.26"; $Goods->printGoods();

물론 모든 것을 이런 식으로 수행하는 것은 의미가 없습니다. 일반적으로 객체는 고유한 제품 식별자를 받고 MySQL 데이터베이스에서 모든 데이터를 가져옵니다.

아이디 = $id; $this->type = "책"; $this->name = "전쟁과 평화"; $this->description = "여러 권으로 이루어진 두꺼운 책"; $this->가격 = "543.26"; ) function printGoods() ( echo " 제품 ID: $this->id. 제품 유형: $this->type. 이름: \"$this->name\". 설명: $this->description. 가격: $this ->가격."; ) ) $Goods = 새 상품(124); $상품->인쇄상품();

이 예에는 새로운 내용이 너무 많습니다.

먼저 __construct() 메서드의 이름에 주의하세요. 이는 PHP의 예약어이며 이 메소드는 객체가 생성될 때 자동으로 실행됩니다. 이러한 메서드를 생성자라고 합니다.

새로운 객체 Goods(124)를 생성할 때 생성자에게 숫자 124를 전달했습니다. 전설에 따르면 생성자는 데이터베이스에서 해당 제품을 수신하고 데이터베이스의 정보에 따라 객체의 속성을 결정했습니다. 데이터 베이스.

객체 속성에는 보호된 범위, 즉 보호된 범위가 있습니다. 클라이언트 코드에서 이러한 속성에 직접 액세스할 수 없습니다.

클라이언트 코드는 클래스, 개체 또는 함수를 사용하는 코드입니다. 이것은 중요한 용어이므로 기억하십시오.

다음은 클라이언트 코드에서 보호 속성에 액세스하려는 시도의 예입니다.

가격;

이 예에서는 "보호 재산에 접근할 수 없습니다."라는 오류가 반환됩니다. 이렇게 되어야 합니다. 우리는 접근할 수 없는 곳으로 갑니다.

요약

그래서 우리가 이 페이지에서 배운 내용은 다음과 같습니다.

  • 수업이란 무엇입니까? 왜 수업이 필요한가요? 예약어 class 를 사용하여 클래스를 만드는 방법.
  • 클래스 속성과 메서드란 무엇입니까?
  • new 연산자를 사용하여 일부 클래스의 객체를 생성하는 방법.
  • -> 구문을 사용하여 객체에서 클래스의 속성과 메서드에 액세스하는 방법입니다.
  • 객체에서 클래스 속성을 변경하는 방법.
  • 속성 및 메서드의 범위. protected라는 단어를 사용하여 범위를 제한하는 방법.
  • $this 의사 변수를 사용하여 클래스의 메서드 속성에 액세스하는 방법.
  • __construct() 메서드를 사용하여 생성자를 만듭니다.

이것은 개체를 마스터하는 첫 번째 단계일 뿐입니다. 전반적으로 이 모든 것이 왜 필요한지는 아직 완전히 명확하지 않습니다. 그러나 인내심을 갖는 한 물체의 그림은 조금 후에 명확해질 것입니다.

다음으로 배워야 할 것은 PHP의 상속입니다. 이 부분에서는 상속 메커니즘을 연구할 뿐만 아니라 클래스와 개체를 사용하는 것과 관련된 실제 사례도 제공할 수 있습니다.

잔스트라에서

51페이지 - 메소드에 전달된 인수가 클래스 유형을 준수하는지 확인합니다(배열도 확인할 수 있습니다).

56페이지 - instanceof 연산자(영어 인스턴스)는 왼쪽 인수가 오른쪽 인수의 객체 유형과 일치하는지 확인합니다.

PHP의 클래스와 객체

수업 객체지향 프로그래밍(OOP)의 기본 개념입니다. 클래스는 OOP의 구문 기반을 형성합니다. 논리적으로 관련된 데이터 및 기능에 대한 일종의 "컨테이너"로 생각할 수 있습니다(일반적으로 호출됨 - 아래 참조). 간단히 말해서 클래스는 일종의 데이터 유형입니다.

클래스의 인스턴스는 다음과 같습니다. 객체. 객체는 데이터()와 이를 처리하기 위한 함수(메서드)의 집합입니다. 속성과 메서드가 호출됩니다. 일반적으로 객체는 캡슐화를 지원하는 모든 것입니다.

클래스가 데이터 유형으로 간주될 수 있다면 객체는 (비유적으로) 변수로 간주될 수 있습니다. 스크립트는 여러 변수와 마찬가지로 동일한 클래스의 여러 개체에 대해 동시에 작업할 수 있습니다.

객체 내에서 데이터와 코드(클래스 멤버)는 공개되거나 공개되지 않을 수 있습니다. 공용 데이터와 클래스 멤버는 객체의 일부가 아닌 프로그램의 다른 부분에서 액세스할 수 있습니다. 그러나 개인 데이터와 클래스 멤버는 이 개체 내에서만 사용할 수 있습니다.

PHP의 클래스 설명은 함수 단어로 시작됩니다. 수업:

클래스 클래스명(
// 클래스 멤버 설명 - 이를 처리하기 위한 속성 및 메서드
}

객체를 선언하려면 연산자를 사용해야 합니다. 새로운:

개체 = 새 클래스 이름;

데이터는 기능어를 사용하여 설명됩니다. var. 방법은 일반적인 사용자 정의 함수와 동일하게 설명됩니다. 메소드에 매개변수를 전달할 수도 있습니다.

요약하자면, 클래스 선언은 키워드로 시작해야 합니다. 수업(함수 선언이 키워드로 시작하는 방법과 유사합니다. 기능). 클래스에 포함된 모든 속성 선언 앞에는 키워드가 와야 합니다. var. 속성은 PHP가 지원하는 모든 유형의 데이터가 될 수 있으며 약간의 차이가 있는 변수로 생각할 수 있습니다. 속성 선언 다음에는 일반적인 사용자 정의 함수 선언과 매우 유사한 메서드 선언이 옵니다.

일반적으로 허용되는 규칙에 따르면 OOP 클래스 이름은 대문자로 시작하고 메서드 이름의 첫 번째 단어를 제외한 모든 단어는 대문자로 시작합니다(첫 번째 단어는 소문자로 시작함). 물론, 편리하다고 생각되는 표기법을 사용할 수 있습니다. 가장 중요한 것은 표준을 선택하고 이를 고수하는 것입니다.

PHP의 예제 클래스:

// 새로운 Coor 클래스를 생성합니다:
클래스 쿠어(
// 데이터(속성):
var$이름;
var $addr;

// 메소드:
함수 이름() (
에코 "

남자

" ;
}

}


$객체 = newCoor;
?>

PHP에서 클래스와 객체에 접근하기

클래스가 어떻게 설명되고 객체가 생성되는지 살펴보았습니다. 이제 클래스의 멤버에 접근해야 합니다. 이를 위해 PHP에는 연산자가 있습니다. -> . 예는 다음과 같습니다.

// 새로운 Coor 클래스를 생성합니다:
클래스 쿠어(
// 데이터(속성):
var$이름;

// 메소드:
함수 Getname() (
에코 "

남자

" ;
}

}

// Coor 클래스의 객체를 생성합니다:
$객체 = newCoor;
// 클래스 멤버에 대한 액세스를 얻습니다:
$object -> 이름 = "알렉스" ;
에코 $객체 -> 이름 ;
// "Alex"를 인쇄합니다.
// 이제 클래스 메서드(사실 클래스 내부의 함수)에 액세스해 보겠습니다.
$객체 -> Getname();
// "John"을 대문자로 인쇄합니다.
?>

클래스 내의 클래스 멤버에 액세스하려면 포인터를 사용해야 합니다. $this, 항상 현재 개체를 참조합니다. 수정된 방법 이름 가져오기():

함수 Getname() (
echo $this->이름;
}

같은 방법으로 메소드를 작성할 수 있습니다. 설정이름():

함수 Setname($name) (
$this->이름 = $이름;
}

이제 이 방법을 사용하여 이름을 변경할 수 있습니다. 설정이름():

$object->Setname("피터");
$object->Getname();

전체 코드 목록은 다음과 같습니다.

// 새로운 Coor 클래스를 생성합니다:
클래스 쿠어(
// 데이터(속성):
var$이름;

// 메소드:
함수 Getname() (
echo $this -> 이름 ;
}

함수 Setname($name) (
$this -> 이름 = $name ;
}

}

// Coor 클래스의 객체를 생성합니다:
$객체 = newCoor;
// 이제 이름을 변경하려면 Setname() 메서드를 사용합니다.
$object -> Setname("닉");
// 액세스를 위해 이전과 마찬가지로 Getname():
$객체 -> Getname();
// 스크립트는 "Nick"을 인쇄합니다.
?>

바늘 $this데이터 액세스뿐만 아니라 메서드에 액세스하는 데에도 사용할 수 있습니다.

함수 Setname($name) (
$this->이름 = $이름;
$this->Getname();
}

생성자

객체를 생성할 때 일부 속성의 값을 설정해야 하는 경우가 많습니다. 다행스럽게도 OOP 기술 개발자들은 이러한 상황을 고려하여 개념에 구현했습니다. 생성자는 일부 속성의 값을 설정하는 메서드입니다(다른 메서드를 호출할 수도 있음). 생성자는 새 객체가 생성될 때 자동으로 호출됩니다. 이를 가능하게 하려면 생성자 메서드의 이름이 이를 포함하는 클래스의 이름과 일치해야 합니다. 생성자 예:

클래스 웹페이지(
var $bgcolor;
함수 웹페이지($color)(
$this -> bgcolor = $color ;
}
}

// 웹페이지 클래스 생성자를 호출합니다.
$page = 새 웹페이지("갈색");
?>

이전에는 객체 생성과 속성 초기화가 별도로 수행되었습니다. 디자이너를 사용하면 이러한 작업을 한 단계로 수행할 수 있습니다.

흥미로운 세부사항: 전달된 매개변수 수에 따라 다른 생성자가 호출될 수 있습니다. 고려된 예에서 클래스의 객체는 웹 페이지두 가지 방법으로 생성할 수 있습니다. 먼저, 단순히 객체를 생성하지만 해당 속성을 초기화하지 않는 생성자를 호출할 수 있습니다.

$page = 새 웹페이지;

둘째, 클래스에 정의된 생성자를 사용하여 객체를 생성할 수 있습니다. 이 경우 웹페이지 클래스의 객체를 생성하고 해당 속성에 값을 할당합니다. bgcolor:

$page = 새 웹페이지("갈색");

소멸자

PHP에는 직접적인 지원이 없습니다. 그러나 PHP 함수를 호출하여 쉽게 소멸자를 시뮬레이션할 수 있습니다. 설정되지 않음(). 이 함수는 변수의 내용을 삭제하고 변수가 차지한 리소스를 시스템에 반환합니다. 개체 포함 설정되지 않음()변수와 동일한 방식으로 작동합니다. 당신이 객체를 가지고 작업한다고 가정 해 봅시다 $웹페이지. 이 특정 객체에 대한 작업을 마친 후 함수가 호출됩니다.

설정 해제($웹페이지);

이 명령은 메모리의 모든 내용을 삭제합니다 $웹페이지. 캡슐화의 정신으로 전화를 걸 수 있습니다 설정되지 않음()라는 메소드로 파괴하다()그런 다음 호출하십시오.

$웹사이트->파괴();

소멸자를 호출해야 하는 필요성은 많은 양의 리소스를 사용하는 개체로 작업할 때만 발생합니다. 스크립트가 완료되면 모든 변수와 개체가 자동으로 삭제되기 때문입니다.

객체 초기화 중

때로는 개체를 초기화하여 개체의 속성을 초기 값에 할당해야 하는 경우도 있습니다. 클래스 이름이 다음과 같다고 가정하자. 쿠어여기에는 사람의 이름과 거주 도시라는 두 가지 속성이 포함됩니다. 예를 들어 객체를 초기화하는 메서드(함수)를 작성할 수 있습니다. 초기화():

// 새로운 Coor 클래스를 생성합니다:
클래스 쿠어(
// 데이터(속성):
var$이름;
var $도시;

// 초기화 방법:
함수 초기화($name) (
$this -> 이름 = $name ;
$ this -> city = "런던" ;
}

}

// Coor 클래스의 객체를 생성합니다:
$객체 = newCoor;
// 객체를 초기화하려면 즉시 메서드를 호출합니다.
$객체 -> 초기화();
?>

가장 중요한 것은 객체를 생성한 후 즉시 함수를 호출하거나 생성 사이에 일부 메서드를 호출하는 것을 잊지 않는 것입니다(연산자). 새로운) 객체 및 해당 초기화(호출 초기화).

객체가 생성될 때 특정 메소드가 자동으로 호출되어야 한다는 것을 PHP가 알기 위해서는 클래스와 동일한 이름을 지정해야 합니다( 쿠어):

함수 좌표($name)
$this->이름 = $이름;
$this->city = "런던";
}

객체를 초기화하는 메서드를 생성자라고 합니다. 그러나 PHP에는 스크립트가 종료될 때 리소스가 자동으로 해제되므로 소멸자가 없습니다.

클래스 요소에 액세스

클래스 요소는 연산자를 사용하여 액세스됩니다. :: "이중 콜론" "이중 콜론"을 사용하면 클래스 메서드에 액세스할 수 있습니다.

클래스 메서드에 액세스할 때 프로그래머는 이러한 클래스의 이름을 사용해야 합니다.

클래스 A (
함수 예제() (
에코 "이것은 원래 A::example() 함수입니다.
"
;
}
}

클래스 B는 A를 확장합니다(
함수 예제() (
에코 "이것은 B::example()의 재정의입니다.
"
;
A::예제();
}
}

// A 클래스의 객체를 생성할 필요가 없습니다.
// 다음을 출력합니다:
// 이것은 원래 A::example() 함수입니다.
A::예제();

// B 클래스의 객체를 생성합니다.
$b = 새로운 B PHP 포털 포럼. S.U.

이 튜토리얼에서는 PHP의 객체 지향 프로그래밍의 기본 사항을 배웁니다. OOP의 일반적인 원리를 배우고 PHP에서 간단한 스크립트를 작성하는 방법을 배웁니다.

PHP의 OOP에 대한 일련의 강의 중 첫 번째에 오신 것을 환영합니다! 이 시리즈의 모든 강의를 완료하면 OOP의 기본 원칙과 개념을 배우고 PHP에서 유용한 애플리케이션을 빠르고 쉽게 만드는 방법을 배우게 됩니다.

이 튜토리얼에서는 여러분에게 속도를 높이고 OOP의 기본 개념에 대해 설명하겠습니다. 당신은 배울 것이다:

  • OOP가 뭐야?
  • OOP가 더 나은 PHP 스크립트를 만드는 데 어떻게 도움이 되는지
  • 클래스, 객체, 메소드, 클래스 변수와 같은 몇 가지 기본 개념
  • PHP 스크립트 작성을 시작하는 곳

PHP 객체의 세계로 뛰어들 준비가 되셨나요? 그럼 계속하세요!

객체 지향 프로그래밍이란 무엇입니까?

PHP에서 사용자 정의 함수를 만들고 사용해 본 적이 있다면 절차적 프로그래밍 스타일을 사용해 본 것입니다. 절차적 프로그래밍에서는 일반적으로 숫자, 문자열, 배열 등의 데이터 구조를 만듭니다. - 일부 데이터를 저장한 다음 이 데이터를 조작하는 특수 기능을 사용하여 이러한 구조를 처리합니다.

객체 지향 프로그래밍(OOP)은 데이터 구조와 이를 처리하는 함수를 객체라고 하는 단일 엔터티에 저장하기 때문에 발전했습니다. 일부 함수를 사용하여 데이터를 처리하는 대신 해당 데이터를 개체에 로드한 다음 해당 메서드를 호출하여 이를 조작하고 원하는 결과를 얻습니다.

대부분의 경우 OOP를 사용하여 생성된 객체는 실제 엔터티를 반영합니다. 예를 들어, 사이트에 대한 포럼을 생성하는 경우 각 포럼 회원에 대한 정보(이름, 로그인, 이메일, 비밀번호 등)를 저장하는 Member 개체와 이 정보를 처리하는 메서드( 등록, 승인, 로그아웃, 금지 등).

왜 OOP를 사용하는가?

절차지향과 객체지향은 동일한 작업을 수행하는 두 가지 다른 방법입니다. 둘 중 하나가 다른 것보다 낫다는 뜻은 아닙니다. 모두가 원하는 대로 작성하므로 이 두 가지 접근 방식을 하나의 스크립트로 쉽게 결합할 수도 있습니다.

그러나 개발자를 위한 OOP의 몇 가지 이점은 다음과 같습니다.

  • 실제 상황을 반영하는 것이 더 쉽습니다. 위에서 언급한 것처럼 객체는 실제 개체(사람, 제품, 카드, 블로그 기사 등)를 반영합니다. 각 객체의 목적은 애플리케이션 설계를 막 시작할 때 작업을 크게 단순화합니다. 객체 간의 관계가 명확하고 이해하기 쉬워지는 목표와 같습니다.
  • 모듈식 프로그램을 작성하는 것이 더 쉽습니다. OOP에는 모듈 작성이 포함됩니다. 코드를 모듈로 나누면 관리, 디버깅 및 확장이 더 쉬워집니다.
  • 여러 번 사용할 코드를 작성하는 것이 더 쉽습니다. 두 번 이상 사용할 수 있는 코드를 작성하면 애플리케이션 작성 시 시간이 절약되고, 시간이 지나면 여러 애플리케이션에서 사용할 수 있는 이러한 종류의 모듈로 구성된 전체 라이브러리를 만들 수도 있습니다. 응용 프로그램. OOP를 사용하면 데이터 구조와 함수가 여러 번 사용할 수 있는 단일 개체에 캡슐화되므로 이러한 코드를 작성하는 것이 비교적 쉬워집니다.

몇 가지 기본 개념

스크립트 작성을 시작하기 전에 클래스, 개체, 클래스 변수 및 메서드의 개념을 잘 이해해야 합니다.

클래스

클래스는 객체의 프레임워크입니다. 이는 다음을 정의하는 코드 조각입니다.

  • 생성된 클래스 객체에 포함될 데이터 유형
  • 이러한 개체를 포함하는 함수입니다.

OOP 애플리케이션을 만들 때 일반적으로 애플리케이션의 다양한 유형의 엔터티를 나타내는 여러 클래스를 만듭니다. 예를 들어 포럼을 만들려면 Forum, Topic, Post 및 Member 클래스를 만들 수 있습니다.

사물

객체는 클래스를 통해 생성되는 특별한 유형의 변수입니다. 여기에는 실제 데이터와 이를 조작하기 위한 기능이 포함되어 있습니다. 하나의 단일 클래스에서 원하는 만큼 많은 개체를 만들 수 있습니다. 객체의 각 기능은 동일한 클래스에서 생성된 경우에도 다른 객체와 독립적입니다.

실제 엔터티와 비교하려면 다음을 수행하십시오.

  • 클래스는 자동차의 프레임워크입니다. 자동차의 모양과 작동 방식을 정의하지만 여전히 추상적인 개체입니다.
  • 객체는 와이어프레임에서 생성된 실제 자동차입니다. 객체에는 실제 속성(예: 속도)과 동작(예: 가속 또는 제동)이 있습니다.

참고: 객체는 종종 클래스의 본질이라고 불리며, 클래스의 객체를 생성하는 과정을 구현이라고 합니다.

클래스 변수

특정 객체에 저장된 데이터 값은 클래스 변수라는 특수 변수에 기록됩니다. 클래스 변수는 해당 객체와 밀접하게 연관되어 있습니다. 클래스의 모든 객체가 동일한 변수를 가지더라도 해당 값은 다를 수 있습니다.

행동 양식

클래스에 정의되어 해당 클래스의 객체에 사용되는 함수를 메서드라고 합니다. 일반 함수와 크게 다르지 않습니다. 값을 전달할 수 있고 지역 변수와 반환 값을 포함할 수 있습니다. 그러나 메서드는 개체 변수와 함께 작동하는 경우가 더 많습니다. 예를 들어, 사용자를 포럼에 로그인하기 위한 login() 메소드는 logIn 클래스 변수를 true로 설정할 수 있습니다.

PHP에서 클래스를 만드는 방법은 무엇입니까?

이제 클래스, 메소드, 클래스 변수 및 객체가 무엇인지 알았으므로 이제 PHP 코드에서 몇 가지 클래스와 객체를 생성할 차례입니다.

먼저, 실제로 클래스를 생성하는 방법을 살펴보겠습니다. 기본적으로 클래스를 생성하는 스크립트는 다음과 같습니다.

클래스 ClassName ( // (클래스 정의) )

예를 들어, 포럼에 대한 Member 클래스를 생성하는 경우 다음과 같이 작성합니다.

클래스 멤버( // (클래스 정의) )

아주 간단합니다. 당연히 이 클래스는 변수와 메서드를 추가하기 전까지는 아무 작업도 수행하지 않습니다. 그러나 위의 코드는 사용할 수 있는 유효한 PHP 클래스를 생성합니다.

경험상 좋은 규칙은 각 클래스를 클래스 이름과 동일한 이름을 가진 별도의 파일에 배치하는 것입니다. 예를 들어 Member 클래스를 Member.php 파일에 넣고 이를 클래스라는 폴더에 저장합니다.

PHP에서 객체를 만드는 방법은 무엇입니까?

new 키워드를 사용하여 객체를 생성할 수 있습니다:

새 클래스 이름()

이 코드는 ClassName 클래스의 객체를 생성합니다. 이 개체는 나중에 사용해야 하므로 변수에 저장해야 합니다. 예를 들어 Member 클래스의 객체를 생성하고 이를 $member 변수에 저장해 보겠습니다.

$member = 새 회원();

같은 클래스의 다른 객체를 생성할 수도 있습니다:

$member2 = 신규회원();

동일한 클래스에서 이 두 개체를 만들었지만 $member 및 $member2 변수는 서로 독립적입니다.

클래스 변수 생성

이제 클래스와 클래스 객체를 생성하는 방법을 알았으니, 클래스 변수를 생성하는 방법을 살펴보겠습니다. 클래스에 추가할 수 있는 클래스 변수에 대한 접근자는 3개입니다.

  • 공용 클래스 변수(public): 액세스 가능 - 즉 이 코드의 위치에 관계없이 스크립트 내 어디에서나 클래스 내부 또는 외부에서 읽거나 수정할 수 있습니다.
  • 프라이빗 클래스 변수(private): 클래스 메서드에서만 접근 가능합니다. 객체를 코드의 나머지 부분과 분리하려면 클래스 변수를 비공개로 만드는 것이 가장 좋습니다.
  • 보호된 클래스 변수: 상속된 클래스의 메서드뿐만 아니라 자신의 클래스 메서드에도 사용할 수 있습니다(상속에 대해서는 나중에 설명하겠습니다).

클래스 변수를 생성하려면 public, private 또는 protected 키워드를 쓴 다음 변수 이름을 입력합니다.

클래스 ClassName(공개 $propertyName; 비공개 $propertyName; protected $propertyName; )

사용자 이름을 저장하기 위해 Member 클래스에 공개 클래스 변수를 추가해 보겠습니다.

클래스 멤버( public $username = ""; )

클래스 변수를 초기화했으며 해당 값은 빈 문자열 ""입니다. 즉, 새 사용자가 생성되면 사용자 이름은 기본적으로 빈 문자열로 설정됩니다. PHP의 일반 변수의 경우와 마찬가지로 클래스 변수도 초기화를 하지 않아도 되지만, 게으르지 않는 것이 좋습니다. 클래스 변수를 초기화하지 않으면 기본값은 null입니다.

클래스 변수에 액세스

객체의 변수에 접근하려면 -> 연산자를 사용하세요:

$객체->속성이름

해보자. Member 클래스와 클래스 변수를 선언하고, 이 클래스의 객체를 생성한 다음, 클래스 변수의 값을 설정하여 화면에 표시하는 스크립트를 작성해 보겠습니다.

사용자 이름 = "프레드"; echo $member->사용자 이름; // "프레드"를 인쇄 ?>

이 코드를 실행하면 클래스 변수 $member->username의 값인 "Fred"라는 문자열이 표시됩니다. 보시다시피 일반 변수처럼 객체 변수에 대해 작업을 수행합니다. 값을 설정하고 읽을 수 있습니다.

클래스에 메서드 추가

방법을 만드는 것은 어떻습니까? 앞서 언급했듯이 메서드는 클래스의 일부인 일반 함수일 뿐입니다. 따라서 동일한 function 키워드를 사용하여 생성되었다는 사실에 놀라지 않을 수도 있습니다. 일반 함수 생성과의 유일한 차이점은 액세스 식별자(공개, 비공개, 보호) 중 하나를 선언에 추가할 수도 있다는 것입니다. 이러한 방식으로 메소드는 클래스 변수와 유사합니다.

클래스 ClassName ( 공용 함수 methodName() ( // (코드) ) 전용 함수 methodName() ( // (코드) ) 보호 함수 methodName() ( // (코드) ) )

참고: 클래스 변수의 경우와 마찬가지로 공용 메서드는 어디에서나 호출할 수 있고, 개인 메서드는 클래스 내에서만 호출할 수 있으며, 보호 메서드는 클래스 자체와 그 하위 항목에서 호출할 수 있습니다.

클래스에 몇 가지 메서드와 클래스 변수를 추가해 보겠습니다.

  • 사용자를 식별하기 위한 개인 $loggedIn 클래스 변수, 즉 그 사람이 들어왔든 안 왔든,
  • $loggedIn 클래스 변수를 true로 설정하여 포럼에 로그인하는 login() 메소드,
  • $loggedIn 클래스 변수를 false로 설정하여 포럼에서 로그아웃하는 logout() 메소드,
  • $loggedIn 클래스 변수의 값을 반환하는 isLoggedIn() 메서드입니다.

코드는 다음과 같습니다.

로그인 = true; ) 공개 함수 logout() ( $this->loggedIn = false; ) 공개 함수 isLoggedIn() ( return $this->loggedIn; ) ) ?>

새로운 $this 키워드를 사용했다는 사실을 눈치채셨을 것입니다. 객체 메서드의 맥락에서 특수 변수 $this는 객체 자체를 참조합니다. 객체 메소드에서 $this를 사용하면 해당 메소드는 객체의 모든 클래스 변수 및 메소드에 액세스할 수 있습니다.

예를 들어, login() 메소드는 $this->loggedIn을 통해 객체의 $loggedIn 클래스 변수에 액세스할 수 있습니다.

그런데 우리 클래스 변수는 비공개이므로 스크립트의 어느 부분에서도 호출할 수 없고 login(), logout() 및 isLoggedIn() 메서드에서만 호출할 수 있습니다. 이는 객체의 내부(사용자가 로그인했는지 여부를 정확히 기록하는 방법 등)가 코드의 나머지 부분과 분리되어 있기 때문에 좋은 접근 방식입니다. 가능하다면 객체가 자율적이고 이동 가능하며 보호되도록 개인 클래스 변수를 사용하십시오.

참고: 이 예에서 $username 클래스 변수는 공개입니다. 나는 단지 객체의 클래스 변수에 접근하는 방법을 보여주기 위해 이 작업을 수행했습니다. 실제 프로젝트에서는 이 변수를 비공개로 만들고 필요한 경우 사용자 이름 값을 설정하기 위해 특별한 공개 클래스 변수를 만드는 것이 좋습니다.

메소드 사용

객체에 대해 메서드를 호출하려면 이미 익숙해진 -> 연산자를 사용하세요.

$객체->메소드이름()

이는 일반 함수를 호출하는 것과 동일하게 작동합니다. 괄호 안에 인수를 전달할 수 있으며(물론 인수를 취한다고 가정), 메서드 호출은 나중에 사용할 수 있는 특정 값을 반환할 수도 있습니다.

로그인 = true; ) 공개 함수 logout() ( $this->loggedIn = false; ) 공개 함수 isLoggedIn() ( return $this->loggedIn; ) ) $member = new Member(); $member->사용자 이름 = "프레드"; echo $member->사용자 이름 . "이다". ($회원->
"; $member->login(); echo $member->username . " 은 " . ($member->isLoggedIn() ? "로그인" : "로그아웃") . "
"; $member->logout(); echo $member->username . " 은 " . ($member->isLoggedIn() ? "로그인됨" : "로그아웃") . "
"; ?>

이 스크립트는 다음을 표시합니다.

Fred가 로그아웃됨 Fred가 로그인됨 Fred가 로그아웃됨

작동 방식은 다음과 같습니다.

  1. Member 클래스를 설명한 후 해당 객체를 생성하여 $member 변수에 저장했습니다. 또한 이 개체의 클래스 변수 $username에 "Fred" 값을 지정했습니다.
  2. 그런 다음 $member->isLoggedIn() 메서드를 호출하여 사용자가 로그인했는지 여부를 확인했습니다. 이 메서드는 단순히 $loggedIn 클래스 변수의 값을 반환합니다. 이 클래스 변수의 기본값은 false이므로 $member->isLoggedIn()을 호출한 결과는 false가 되어 "Fred가 로그아웃되었습니다"라는 메시지가 표시됩니다.
  3. 그런 다음 login() 메소드를 호출합니다. $loggedIn 클래스 변수를 true로 설정합니다.
  4. 이제 $member->isLoggedIn() 메소드를 호출하면 true를 반환하고 "Fred가 로그인되었습니다"라는 메시지가 표시됩니다.
  5. $loggedIn 속성 값을 false로 설정하는 logout() 메서드를 호출해 보겠습니다.
  6. $member->isLoggedIn() 메서드를 세 번째 호출해 보겠습니다. $loggedIn 속성이 다시 false로 설정되었으므로 이제 false를 반환합니다. 그러면 “Fred가 로그아웃되었습니다”라는 메시지가 다시 표시됩니다.

참고: 이것을 먼저 본 경우: ?:는 삼항 연산자입니다. 이것은 if...else 블록의 단순화된 버전입니다. 이러한 유형의 연산자에 대해 알아볼 수 있습니다.

결론

이 튜토리얼에서는 PHP에서 OOP의 기본 사항을 배웠습니다. 다음과 같은 내용을 배웠습니다.

  • OOP란 무엇이며 왜 유용한가요?
  • 클래스, 객체, 클래스 변수 및 메소드의 개념
  • 클래스와 객체를 만드는 방법
  • 클래스 변수를 생성하고 사용하는 방법
  • 공개, 비공개, 보호된 액세스 식별자의 개념
  • 클래스 메소드를 생성하고 사용하는 방법

이미 이에 대해 많은 것을 배웠으며 다음 강의에서 더 많은 것을 배우게 될 것입니다. 그러나 내가 제시한 모든 예를 살펴보았다면 견고한 기초를 갖춘 것입니다. OOP를 사용하여 애플리케이션 생성을 시작할 수 있습니다.

객체를 기술하는 것은 클래스이므로 클래스 정의부터 설명을 시작하겠습니다.

클래스 정의

클래스는 객체를 생성하는 데 사용되는 코드 패턴입니다. 클래스는 class 키워드 뒤에 임의의 클래스 이름을 사용하여 정의됩니다. 클래스 이름은 문자와 숫자의 조합을 사용할 수 있지만 숫자로 시작해서는 안 됩니다. 클래스와 관련된 코드는 이름 뒤에 나타나는 중괄호로 묶어야 합니다. 클래스 정의는 해당 클래스의 각 새 인스턴스에 포함될 요소를 설명합니다. 얻은 데이터를 기반으로 예를 사용하여 클래스 정의 구문을 살펴보겠습니다.

위 예제의 첫 번째 클래스는 아직 그다지 유용하지는 않지만 이미 완전한 클래스입니다. 그럼에도 불구하고 우리는 매우 중요한 일을 해냈습니다. 우리는 유형을 정의했습니다. 스크립트에서 사용할 수 있는 데이터 카테고리를 만들었습니다. 이 장을 더 읽어보면 이것의 중요성이 더욱 분명해질 것입니다.

객체 생성

클래스는 객체를 생성하기 위한 템플릿이므로 객체는 클래스에 정의된 템플릿에 따라 생성되고 구조화된 데이터입니다. 객체는 클래스에 의해 유형이 결정되는 클래스의 인스턴스라고도 합니다. 클래스의 새 인스턴스를 만들려면 new 연산자가 필요합니다. 다음과 같이 클래스 이름과 함께 사용됩니다.

new 연산자 뒤에는 객체가 생성될 기준이 되는 클래스 이름이 표시됩니다. new 연산자는 클래스의 인스턴스를 생성하고 새로 생성된 객체에 대한 참조를 반환합니다. 이 참조는 적절한 유형의 변수에 저장됩니다. 이 코드를 실행하면 먼저 유형의 두 개체가 생성됩니다. 기능적으로는 동일하지만(즉, 비어 있음) $obj1과 $obj2는 동일한 클래스를 사용하여 생성된 동일한 유형의 서로 다른 두 개체입니다.

여전히 혼란스럽다면 실제 비유를 사용해 보겠습니다. 클래스가 플라스틱 자동차를 만드는 데 사용되는 주조 금형이라고 상상해 보세요. 사물은 자동차입니다. 생성되는 물체의 유형은 주물의 모양에 따라 결정됩니다. 자동차는 모든 면에서 동일해 보이지만 여전히 다른 개체입니다. 즉, 동일한 유형의 다른 인스턴스입니다.

속성이라는 특수 데이터 필드를 포함하도록 첫 번째 클래스를 수정하여 이러한 개체를 좀 더 흥미롭게 만들어 보겠습니다.

속성 정의

변수는 클래스에서 정의할 수 있습니다. 클래스에 정의된 변수를 속성(또는 데이터 필드)이라고 합니다. 이는 액세스 제어를 특징으로 하는 protected, public 또는 private 키워드 중 하나로 정의됩니다. 다음 장에서 이러한 키워드에 대해 자세히 살펴보겠습니다. 이제 public 키워드를 사용하여 몇 가지 속성을 정의해 보겠습니다.

보시다시피, 우리는 두 가지 속성을 정의하여 각 속성에 값을 할당했습니다. 이제 첫 번째 클래스를 사용하여 생성하는 모든 개체에는 지정된 값을 가진 두 개의 속성이 있습니다.

참고: 속성 값 초기화는 리터럴(상수 값)이어야 하며 클래스의 속성을 초기화할 필요는 없습니다(값을 지정하지 않으면 기본값은 NULL입니다).

개체 속성은 " -> " 기호를 사용하여 개체와 속성 이름을 지정하여 액세스할 수 있습니다. 객체의 속성이 공개로 정의되었으므로 해당 값을 읽고 새 값을 할당하여 클래스에 정의된 초기 값을 바꿀 수 있습니다.

str; // 객체 속성에 새 값을 할당합니다. $obj->str = "new line"; 에코 "
$obj->str"; ?>

실제로 PHP에서는 클래스의 모든 속성을 선언할 필요가 없습니다. 객체에 속성을 동적으로 추가할 수 있습니다.

newprop = "새 속성"; echo $obj->newprop; ?>

객체에 속성을 할당하는 이 방법은 객체 지향 프로그래밍에서 잘못된 형식으로 간주되어 거의 사용되지 않습니다.

메소드 작업

메소드는 클래스 내에 정의된 일반 함수로, 객체가 다양한 작업을 수행할 수 있도록 해줍니다. 메서드 선언은 앞에 protected, public 또는 private 키워드 중 하나가 오는 점을 제외하면 일반 함수 정의와 유사합니다. 메소드 정의에서 가시성 키워드를 생략하면 메소드가 암시적으로 공개로 선언됩니다. 객체의 메소드는 객체와 메소드 이름을 지정하는 " -> " 기호를 사용하여 액세스할 수 있습니다. 메소드를 호출할 때도 함수 호출과 마찬가지로 괄호를 사용해야 합니다.

str; ) ) $obj = 새로운 첫 번째(); // 객체 메소드 호출 $obj->getstr(); ?>

첫 번째 클래스에 getstr() 메서드를 추가했습니다. 메서드를 정의할 때 범위 키워드를 사용하지 않았습니다. 이는 getstr() 메서드가 공개 유형이고 클래스 외부에서 호출될 수 있음을 의미합니다.

메소드 정의에서 우리는 특별한 의사 변수 $this를 사용했습니다. 클래스 내의 메서드나 속성에 액세스하는 데 사용되며 다음과 같은 구문을 갖습니다.

$this->변수 또는 메소드 이름

클래스 우선( public $str = "some text"; // 클래스에서 메소드를 정의할 때 $this 변수에는 값이 없습니다. function getstr() ( echo $this->str; ) ) // 객체 생성 $obj = 새로운 첫 번째 (); // 우리가 생성한 객체에는 속성과 메소드가 있습니다. // 이제 객체의 메소드에서 변수 $this에는 // 현재 객체, 즉 $obj에 대한 링크가 있습니다. // 즉, 메소드에서 $this를 $this->str 객체의 현재 인스턴스로 대체하면; // 이는 현재 개체의 속성에 대한 // 간단한 액세스처럼 보입니다. $obj->str;

참고: $this에는 아무 것도 할당할 수 없습니다. $this는 항상 현재 개체를 참조한다는 점을 기억하세요.

특수 메소드 - 생성자

클래스에는 속성 값 설정 등을 위해 클래스(객체)의 새 인스턴스가 생성될 때마다 호출되는 생성자라는 특수 메서드가 정의될 ​​수 있습니다. 다른 메소드와 마찬가지로 생성자에도 매개변수가 있을 수 있습니다. 메서드를 생성자로 정의하려면 해당 메서드를 __construct() 로 호출해야 합니다. 메소드 이름은 두 개의 밑줄로 시작해야 합니다. 어떻게 작동하는지 살펴보겠습니다.

숫자1 = $num1; $this->num2 = $num2; ) // 두 숫자를 더하는 메서드 function summa() ( return $this->num1 + $this->num2; ) ) // 객체를 만들고 두 개의 인수를 전달합니다. $obj = new first(15, 35); // 메소드를 호출하고 즉시 작업 결과를 표시합니다. echo $obj->summa(); ?>

__construct 메소드는 new 연산자를 사용하여 객체를 생성할 때 호출됩니다. 괄호 안에 지정된 인수가 생성자에 전달됩니다. 생성자 메서드는 $this 의사 변수를 사용하여 생성되는 개체의 해당 속성에 값을 할당합니다.

참고: 생성자에 매개변수가 없고 클래스의 새 인스턴스를 생성할 때 인수가 전달되지 않으면 클래스 이름 뒤의 괄호()를 생략할 수 있습니다. $obj = new first;

메서드에서 인수 유형 지정

기본적으로 메서드는 모든 유형의 인수를 허용할 수 있지만 메서드가 특정 클래스의 인스턴스만 인수로 허용하도록 하고 싶은 경우가 있습니다. 허용되는 인수 유형을 표시하려면 메서드 정의에서 매개변수 이름 앞에 클래스 이름을 배치하면 됩니다.

getobj(새 고양이()); // 오류가 발생합니다. 잘못된 유형의 인스턴스가 인수로 전달되었습니다. $kitty->getobj(newwrong()); ?>

이제 getobj() 메서드에 대한 인수로 cat 유형의 인스턴스만 전달할 수 있습니다. getobj() 메서드에는 클래스 유형 한정이 포함되어 있으므로 잘못된 유형의 객체를 전달하면 오류가 발생합니다.

유형 힌트는 문자열, 숫자 등과 같은 기본 유형의 매개변수를 정의하는 데 사용할 수 없습니다. 이를 위해서는 메소드 본문에 is_string()과 같은 유형 검사 함수를 사용해야 합니다. 전달되는 인수가 배열임을 지정하는 것도 가능합니다:

my_arr = $some_arr; ) ) ?>

마지막으로 말씀드릴 점은 메소드 매개변수가 특정 클래스로 정의된 경우 해당 메소드에 객체가 전달되지 않은 경우 기본값을 지정할 수 있다는 것입니다. 기본값으로는 ​​NULL만 사용할 수 있습니다.

함수 getobj(cat $getCat = null) ( $this->someVar = $getCat; )

NULL 대신 다른 기본값을 지정하면 오류가 발생합니다.