PHP 5 파워 프로그래밍 PDF 다운로드 주소 /books/28207.html
PHP4에서는 __construct()를 생성자 이름으로 사용하지 않고 클래스를 사용해야 합니다. C++에서와 마찬가지로 메서드입니다.
PHP5에서는 새로운 통합 생성자 명명 방법인 __construct()가 사용됩니다. 물론 클래스 이름을 사용하는 것도 가능합니다.
그러나 두 가지를 동시에 사용하는 경우 시스템은 기본적으로 __construct()를 사용합니다.
class Person {
//PHP4의 메서드
공용 함수 Person(){
echo "PHP4의 메서드"
}
//PHP5에서 권장되는 메서드
공용 함수 __construct(){
echo "PHP5에 권장되는 방법";
}
public function say(){
}
}
$p1=new Person()?> 🎜>
생성자에서는 값을 반환할 수 없으므로 생성자 내에서 오류를 생성하는 가장 일반적인 방법은 예외를 발생시키는 것입니다.
코드는 다음과 같습니다.
class Person{
private $_age;
public function __construct($age){
try {
if ($age<120){
$this- >_age=$age ;
}else {
throw new Exception("입력한 나이가 너무 늙었습니다.")
}
}catch(예외 $e){
echo $e->getMessage( );
}
}
}
$p1=new Person(121)
?> >접근 제어
객체 속성의 접근 보호는 OOP의 핵심 패러다임입니다.
공개: 어디서나 접근 가능보호: 클래스 멤버는 하위 클래스와 상위 클래스가 객체 내부의 메소드에서 접근할 수 있습니다. 자신이 위치한 클래스
Private: 클래스 멤버는 해당 클래스의 객체 내의 메서드로만 접근할 수 있으며, 상속된 클래스의 멤버에서는 접근할 수 없습니다. 전용 멤버는 상속되지 않으므로 두 개의 관련 클래스가 동일한 이름을 가진 전용 변수를 선언할 수 있습니다.
즉, 두 클래스 모두 자신의 전용 속성만 볼 수 있으며 전용 멤버 간에는 관계가 없습니다. 예:
코드 복사
코드는 다음과 같습니다.
/*** MyClass 정의 */
class MyClass
{
public $public = 'Public';
protected $protected = 'Protected'
private $private = ' Private';
printHello()
echo $this->public
echo $this->private; }
}
$obj = new MyClass();
echo $obj->public; // 이 줄은 정상적으로 실행될 수 있습니다.
echo $obj->protected; 치명적인 오류가 발생합니다
echo $obj->private; // 이 줄도 치명적인 오류가 발생합니다
$obj->printHello() // Public, Protected 및 Private 출력
/ **
* MyClass2 정의
*/
class MyClass2는 MyClass를 확장합니다
{
// 공개 및 보호는 재정의할 수 있지만 비공개는
보호할 수 없습니다. $protected = 'Protected2'
function printHello ( )
{
echo $this->public;
echo $this->private;
}
}
$ obj2 = new MyClass2();
echo $obj->public; // 이 줄은 정상적으로 실행될 수 있습니다.
echo $obj2->private; // private이 정의되지 않았습니다.
echo $obj2 -> ;protected; // 이 줄은 치명적인 오류를 생성합니다
$obj2->printHello() // Public, Protected2를 출력하지만 Private은 출력하지 않습니다
참고: 클래스에서 메소드는 public, protected 또는 private 키워드를 사용하여 정의해야 합니다. 이러한 키워드가 설정되지 않은 경우 메소드는 기본 공개로 설정됩니다.
정적 메서드
정적 메서드는 객체 인스턴스를 생성하지 않고 클래스명::static 메서드를 통해 호출할 수도 있고, $this->static 메서드를 통해 객체 인스턴스 내에서 호출할 수도 있습니다. self: :호출할 정적 메서드입니다.
코드 복사
코드는 다음과 같습니다. class Foo
{ public static $my_static = 'foo'; public static function staticValue() { return self::$my_static;//클래스의 정적 멤버에 액세스하려면 self 키워드를 사용하세요. } }
echo $obj->staticValue();//방법 1
echo Foo::staticValue();//방법 2
?
Cloner un objet En PHP4, lorsqu'un nouvel objet est renvoyé, l'objet lui-même est renvoyé
En PHP5, lorsqu'un objet est nouveau, l'objet pointé est renvoyé. Handle"
Cela signifie qu'en PHP5, lors de l'affectation d'une instance d'objet ($obj1) à une autre variable ($obj2), les deux objets pointent vers la même zone mémoire.
Par exemple :
php
test de classe{
public $str;
}
$obj1=new test();
$obj1->str="obj1"; obj1;
$obj2->str="obj2";
echo $obj1->str;//affichera "obj1"
?> $obj1 et $ obj2 pointent vers la même zone mémoire, donc lorsqu'un objet est utilisé pour modifier la valeur d'une variable membre, cela affectera l'autre objet.
Mais parfois, nous avons besoin de faire une copie d'un objet (deux zones mémoire indépendantes. A ce moment, vous pouvez utiliser la commande du langage clone
Reportez-vous à l'exemple ci-dessous
Copier le code
}
$obj1=nouveau test();
$obj1->str="obj1";
$obj2= clone $obj1; "obj2";
echo $obj1->str;//affichera "obj2"
?>
parent:: et self::
self: : pointe vers la classe actuelle et est généralement utilisé pour accéder aux membres statiques, aux méthodes et aux constantes
parent : pointe vers la classe parent, et il est souvent utilisé pour appeler le constructeur et les méthodes du parent classe, et peut également être utilisé pour accéder aux membres de la classe parent et aux constantes
Remarque : Vous devez utiliser parent:: au lieu d'un nom spécifique de la classe parent, car cela vous permet de modifier facilement la hiérarchie de votre classe.
Exemple :
Copier le code
Le code est le suivant :
class Father{ public function __construct(){ echo "Appeler le constructeur de la classe parent
"
}
}
class Son extends Father {
public function __construct(){
parent::__construct();//Méthode 1
// Father::__construct();//Méthode 2
echo "Appeler le constructeur de la sous-classe";
}
}
$son=new Son();
?>
Résultat :
Appeler le constructeur de la classe parent
Appeler le constructeur de la sous-classe Méthode 1 est recommandé pour la fonction
, pour les raisons évoquées ci-dessus.
instanceof instance
Copier le codeclass Square extends Rectangle {
public $name=__CLASS__
}
class Cercle{
public $name=__CLASS__;
}
function checkIfRectangle($shape){
if ($shape instanceof Rectangle ){
echo $shape->name; }else {
echo "Cet objet n'est pas une instance de la classe Rectangle"
}
}
checkIfRectangle(new Square());//Sortie : Square
checkIfRectangle(new) Circle());/ /Output : L'objet n'est pas une instance de la classe Rectangle
?>
Remarque : __CLASS__ est une constante spéciale utilisée pour stocker le nom de la classe actuelle.