Adresse de téléchargement PDF PHP 5 Power Programming /books/28207.html
En PHP4, __construct() n'est pas utilisé comme nom du constructeur, et la classe doit être utilisée Le nom définit une méthode, tout comme en C++.
En PHP5, une nouvelle méthode de nommage unifiée des constructeurs est utilisée : __construct() Bien entendu, il est également possible d'utiliser des noms de classes.
Cependant, si vous utilisez les deux en même temps, le système utilisera __construct() par défaut.
class Person {
//Méthode en PHP4
public function Person(){
echo "Méthode en PHP4"
}
//Méthode recommandée en PHP5
public function __construct(){;
echo "Méthode recommandée pour PHP5";
}
public function say(){
}
}
$p1=new Person(); 🎜>
Vous ne pouvez pas renvoyer de valeur dans le constructeur, donc le moyen le plus courant de générer une erreur à partir du constructeur est de lever une exception.
Le code est le suivant :
class Person{
private $_age;
public function __construct($age){
try {
if ($age<120){
$this- >_age=$age ;
}else {
throw new Exception("L'âge que vous avez entré est trop ancien");
}
}catch (Exception $e){
echo $e->getMessage( );
}
}
}
$p1=nouvelle personne (121);> >Contrôle d'accès
La protection de l'accès aux attributs d'objet est un paradigme clé de la POO
Public : accessible n'importe où
Protégé : les membres de la classe sont accessibles à partir des méthodes à l'intérieur de l'objet par les sous-classes et les classes parentes de la classe dans laquelle ils se trouvent
Privé : les membres de la classe ne sont accessibles que par les méthodes de l'objet de la classe dans laquelle ils se trouvent, mais ne sont pas accessibles depuis les membres de la classe héritée. Étant donné que les membres privés ne seront pas hérités, deux classes liées peuvent déclarer une variable privée portant le même nom.
C'est-à-dire que les deux classes ne peuvent voir que leurs propres propriétés privées et qu'il n'y a aucune relation entre les membres privés.
Exemple : Copier le code
Le code est le suivant :
{
public $public = 'Public';
protected $protected = 'Protégé'
private $private = ' Privé';
function printHello()
{
echo $this->public
echo $this->protected; }
}
$obj = new MyClass();
echo $obj->public; // Cette ligne peut être exécutée normalement
echo $obj->protected; générera une erreur fatale
echo $obj->private; // Cette ligne générera également une erreur fatale
$obj->printHello(); // Sortie publique, protégée et privée
/ **
* Définir MaClasse2
*/
class MyClass2 extends MyClass
{
// Public et protected peuvent être redéfinis, mais privé ne peut pas être
protected $protected = 'Protected2'
function printHello; ( )
{
echo $this->public
echo $this->protected
echo $this->private; $ obj2 = new MyClass2();
echo $obj->public; // Cette ligne peut être exécutée normalement
echo $obj2->private; // private n'est pas défini
echo $obj2 -> ;protected; // Cette ligne générera une erreur fatale
$obj2->printHello(); // Sortie Public, Protected2, mais pas Private
Remarque : dans la classe Les méthodes doivent être définies à l'aide des mots-clés public, protected ou private. Si ces mots-clés ne sont pas définis, la méthode sera définie sur le public par défaut.
Méthode statique
La méthode statique peut être appelée via le nom de classe :: méthode statique sans créer d'instance d'objet, ou elle peut être appelée dans une instance d'objet via la méthode $this->static ou self: :Méthode statique à appeler.
Copier le code
Le code est le suivant :
class Foo
{
public static $my_static = 'foo';
public static function staticValue() { return self::$my_static;//Pour accéder aux membres statiques d'une classe, utilisez le mot-clé self } } $obj=new Foo(); echo $obj->staticValue();//Méthode 1echo Foo::staticValue();//Méthode 2
?
Clone object PHP4에서는 new 객체가 반환되면 객체 자체가 반환됩니다.
PHP5에서는 객체가 new이면 가리키는 객체가 반환됩니다. Handle"
이는 PHP5에서 객체 인스턴스($obj1)를 다른 변수($obj2)에 할당할 때 두 객체 모두 동일한 메모리 영역을 가리킨다는 의미입니다.
예:
php
클래스 테스트{
공개 $str;
}
$obj1=new test()
$obj1->str="obj1"; obj1;
$obj2->str="obj2";
echo $obj1->str;//"obj1"을 출력합니다
?> $obj1과 $obj2는 동일한 메모리 영역을 가리키므로 어떤 개체를 사용하여 멤버 변수의 값을 수정하면 다른 개체에 영향을 미치게 됩니다.
그러나 때로는 객체의 복사본(두 개의 독립된 메모리 영역)을 만들어야 할 경우 언어 명령 clone을 사용할 수 있습니다.
아래 예를 참조하세요.
코드 복사
public $str ;
}
$obj1=new test();
$obj1->str="obj1";
$obj2= 클론
$obj2->str= "obj2";
echo $obj1->str;//"obj2"를 출력합니다
?>
parent:::
self: : 현재 클래스를 가리키며 일반적으로 정적 멤버, 메서드 및 상수에 액세스하는 데 사용됩니다.
parent:: 상위 클래스를 가리키며 상위 클래스의 생성자와 메서드를 호출하는 데 자주 사용됩니다. 클래스이며 상위 클래스 및 상수의 멤버에 액세스하는 데에도 사용할 수 있습니다
참고: 상위 클래스의 특정 이름 대신 parent::를 사용해야 합니다. 이렇게 하면 클래스 계층 구조를 쉽게 변경할 수 있기 때문입니다. 예:
코드 복사
public function __construct(){
echo "부모 클래스의 생성자 호출
"
}
}
class Son은 Father를 확장합니다.
public function __construct(){
parent::__construct();//방법 1
// Father::__construct();//방법 2
echo "하위 클래스의 생성자 호출";
}
}
$son=new Son();
?>
결과:
상위 클래스의 생성자 호출
위에서 언급한 이유로
함수에는 하위 클래스 메서드 1의 생성자를 사용하는 것이 좋습니다.
instanceofinstance
코드 복사
public $name=__CLASS__
}
class Square는 Rectangle {
public $name=__CLASS__; Circle{
public $name=__CLASS__;
}
function checkIfRectangle($shape){
if ($shape instanceof Rectangle ){
echo $shape->name; }else {
echo "이 개체는 Rectangle 클래스의 인스턴스가 아닙니다.";
}
}
checkIfRectangle(new Square());//출력: Square
checkIfRectangle(new Circle());/ /출력: 개체가 Rectangle 클래스의 인스턴스가 아닙니다
?>
참고: __CLASS__는 현재 클래스의 이름을 저장하는 데 사용되는 특수 상수입니다.