Home  >  Article  >  Backend Development  >  PHP object-oriented programming learning part 2_PHP tutorial

PHP object-oriented programming learning part 2_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:08:01878browse

PHP Object-Oriented Programming Learning Part 2

Interface

Interface defines the common behaviors of different classes, and then implements different functions in different classes. When many people develop a project together, they may all call some classes written by others. Then you may ask, how do I know how to name the implementation method of a certain function? At this time, the PHP interface class interface is It works. When we define an interface class, the methods in it must be implemented by the following subclasses, such as:

<?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;);  
	}  
}  
?>
Polymorphism
Because there can be many implementation methods of interfaces, there are many specific implementations of the top methods in the interface. This feature is called polymorphism. Polymorphism refers to the ability in object-oriented to redefine or change the nature and behavior of a class according to the context in which the class is used.
PHP does not support overloading to achieve polymorphism, but PHP can achieve polymorphic effects in different directions.
Case 1:

<?
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();
?>
Case 2:

<?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);
}
?>
Abstract class
Abstract classes are between interfaces and class definitions
PHP5 supports abstract classes and abstract methods. Abstract classes cannot be instantiated directly; you must first inherit from the abstract class and then instantiate the subclass. An abstract class must contain at least one abstract method. If a class method is declared abstract, it cannot contain concrete functional implementations.
When inheriting an abstract class, the subclass must implement all abstract methods in the abstract class; in addition, the visibility of these methods must be the same as in the abstract class (or more relaxed). If an abstract method in an abstract class is declared protected, then the method implemented in the subclass should be declared protected or public, and cannot be defined as 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;) ." ";
?>




www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/953323.htmlTechArticlePHP Object-Oriented Programming Learning Part 2 Interface The interface is to define the common behaviors of different classes, and then use them in different Different functions are implemented in the classes. When many people develop a project together...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn