Table des matières
PHP面向对象编程学习之二
Maison php教程 php手册 PHP面向对象编程学习之二

PHP面向对象编程学习之二

Jun 13, 2016 am 09:15 AM
对象

PHP面向对象编程学习之二

接口

接口就是把不同类的共同行为经行了定义,然后在不同的类里面实现不同功能。当有很多人一起开发一个项目时,可能都会去调用别人写的一些类,那你就会问,我怎么知道他的某个功能的实现方法是怎么命名的呢,这个时候PHP接口类interface就起到作用了,当我们定义了一个接口类时,它里面的方式是下面的子类必须实现的,比如 :

<?php
interface Shop  
{  
	public function buy($gid);  
	public function sell($gid);  
	public function view($gid);  
}  

class BaseShop implements Shop  
{  
	public function buy($gid)  
	{  
		echo(&#39;你购买了ID为 :&#39;.$gid.&#39;的商品&#39;);  
	}  
	public function sell($gid)  
	{  
		echo(&#39;你卖了ID为 :&#39;.$gid.&#39;的商品&#39;);  
	}  
	public function view($gid)  
	{  
		echo(&#39;你查看了ID为 :&#39;.$gid.&#39;的商品&#39;);  
	}  
}  
?>
Copier après la connexion
多态
因为接口的实现方法可以有很多,所以对于接口里面顶一顶方法的具体实现是多种多样,这种特性称为多态。多态是指在面向对象中能够根据使用类的上下文来重新定义或改变类的性质和行为。
PHP不支持重载实现多态,但是PHP可以变向的实现多态效果。
案例一:

<?
interface User{ // User接口
	public function  getName();
	public function setName($_name);
}

class NormalUser implements User { // 实现接口的类.
	private $name;
	public function getName(){
		return $this->name;
	}
	public function setName($_name){
		$this->name = $_name;
	}
}

class UserAdmin{ //操作.
	public static function  ChangeUserName(User $_user,$_userName){
		$_user->setName($_userName);
	}
}

$normalUser = new NormalUser();
UserAdmin::ChangeUserName($normalUser,"Tom");//这里传入的是 NormalUser的实例.
echo $normalUser->getName();
?>
Copier après la connexion
案例二:

<?php
// 通过可变参数来达到改变参数数量重载的目的
// 不是必须传入的参数,必须在函数定义时赋初始值
function open_database($DB, $cache_size_or_values=null, $cache_size=null)
{
    switch (function_num_args())  // 通过function_num_args()函数计算传入参数的个数,根据个数来判断接下来的操作
    {
        case 1:
            $r = select_db($DB);
            break;
        case 2:
            $r = select_db($DB, $cache_size_or_values);
            break;
        case 3:
            $r = select_db($DB, $cache_size_or_values, $cache_size);
            break;
    }
    return is_resource($r);
}
?>
Copier après la connexion
抽象类
抽象类是介于接口与类的定义之间
PHP5支持抽象类和抽象方法。抽象类不能直接被实例化,你必须先继承该抽象类,然后再实例化子类。抽象类中 至少要包含一个抽象方法。如果类方法被声明为抽象的,那么其中就不能包括具体的功能实现。
继承一个抽象类的时候,子类必须实现抽象类中的所有抽象方法;另外,这些方法的可见性 必须和抽象类中一样(或者更为宽松)。如果抽象类中某个抽象方法被声明为protected,那么子类中实现的方法就应该声明为protected或者public,而不 能定义为private。
<?php
abstract class AbstractClass
{
 // 强制要求子类定义这些方法
    abstract protected function getValue();
    abstract protected function prefixValue($prefix);

    // 普通方法(非抽象方法)
    public function printOut() {
        print $this->getValue() . " ";
    }
}

class ConcreteClass1 extends AbstractClass
{
    protected function getValue() {
        return "ConcreteClass1";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass1";
    }
}

class ConcreteClass2 extends AbstractClass
{
    public function getValue() {
        return "ConcreteClass2";
    }

    public function prefixValue($prefix) {
        return "{$prefix}ConcreteClass2";
    }
}

$class1 = new ConcreteClass1;
$class1->printOut();
echo $class1->prefixValue(&#39;FOO_&#39;) ." ";

$class2 = new ConcreteClass2;
$class2->printOut();
echo $class2->prefixValue(&#39;FOO_&#39;) ." ";
?>
Copier après la connexion




Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Tags d'article chaud

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Convertissez un tableau ou un objet en chaîne JSON à l'aide de la fonction json_encode() de PHP Convertissez un tableau ou un objet en chaîne JSON à l'aide de la fonction json_encode() de PHP Nov 03, 2023 pm 03:30 PM

Convertissez un tableau ou un objet en chaîne JSON à l'aide de la fonction json_encode() de PHP

Exploration du code source : Comment les objets sont-ils appelés en Python ? Exploration du code source : Comment les objets sont-ils appelés en Python ? May 11, 2023 am 11:46 AM

Exploration du code source : Comment les objets sont-ils appelés en Python ?

Qu'est-ce que l'objet Request en PHP ? Qu'est-ce que l'objet Request en PHP ? Feb 27, 2024 pm 09:06 PM

Qu'est-ce que l'objet Request en PHP ?

Comment convertir le tableau de résultats d'une requête MySQL en objet ? Comment convertir le tableau de résultats d'une requête MySQL en objet ? Apr 29, 2024 pm 01:09 PM

Comment convertir le tableau de résultats d'une requête MySQL en objet ?

Utilisez la fonction __contains__() de Python pour définir l'opération de confinement d'un objet Utilisez la fonction __contains__() de Python pour définir l'opération de confinement d'un objet Aug 22, 2023 pm 04:23 PM

Utilisez la fonction __contains__() de Python pour définir l'opération de confinement d'un objet

Utilisez la fonction __le__() de Python pour définir une comparaison inférieure ou égale de deux objets Utilisez la fonction __le__() de Python pour définir une comparaison inférieure ou égale de deux objets Aug 21, 2023 pm 09:29 PM

Utilisez la fonction __le__() de Python pour définir une comparaison inférieure ou égale de deux objets

Quelle est la différence entre les tableaux et les objets en PHP ? Quelle est la différence entre les tableaux et les objets en PHP ? Apr 29, 2024 pm 02:39 PM

Quelle est la différence entre les tableaux et les objets en PHP ?

Explication détaillée de 5 méthodes de parcours de boucle d'objets Javascript Explication détaillée de 5 méthodes de parcours de boucle d'objets Javascript Aug 04, 2022 pm 05:28 PM

Explication détaillée de 5 méthodes de parcours de boucle d'objets Javascript

See all articles