>  기사  >  백엔드 개발  >  PHP의 객체지향 프로그래밍의 기본에 대해 이야기해 보겠습니다. (2)

PHP의 객체지향 프로그래밍의 기본에 대해 이야기해 보겠습니다. (2)

little bottle
little bottle앞으로
2019-04-23 17:13:331851검색

이 기사에서는 주로 PHP 객체 지향 프로그래밍의 기초에 대해 설명합니다(2). 관심 있는 친구는 이에 대해 배울 수 있습니다.

일부 소규모 프로젝트에서는 클래스의 상속, 캡슐화, 다형성 등의 기능을 자주 접하고 클래스 자체의 기능을 사용하게 됩니다.

그러나 대규모 프로젝트에서는 클래스 인터페이스가 구현에 자주 사용됩니다. 인터페이스는 클래스의 특정 기능 구현을 포함하지 않지만 인터페이스는 클래스의 기능을 제한하기 때문입니다.

복잡하고 대규모 소프트웨어는 여러 기능 클래스로 구성되어야 합니다. 이러한 기능 클래스는 여러 프로그래머가 완료해야 하며, 그 중에서 소프트웨어 설계자는 관련 모드, 팀 작업 분담 및 기타 작업을 지정해야 합니다.

이것은 프로그래밍 통일성의 문제를 가져옵니다. 핵심 기능을 잘 구현하려면 PHP에서 다양한 방법을 사용할 수 있지만 일반적으로 모든 측면을 고려할 수 있는 디자인 인터페이스가 필요합니다.

클래스 캡슐화, 기초, 다형성 등의 기능은 모두 소규모 프로젝트에서 일반적으로 구현되는 클래스의 기능을 포함합니다.

그러나 대규모 프로젝트의 경우 소프트웨어에는 많은 기능이 필요하므로 많은 기능 클래스가 필요하며 이러한 기능 클래스는 일반적으로 여러 프로그래머에 의해 완료되므로 프로그래밍은 많은 프로그래머 사이에서 나타나는 통일된 질문입니다. 소프트웨어의 기능이 잘 실현될 수 있습니까?

이를 위해서는 소프트웨어 설계에 앞서 일련의 기능을 미리 정의해야 하며, 프로그래머는 이러한 기능을 하나씩 구현합니다.

PHP에서 사용할 수 있는 메서드는 많이 있으며 일반적으로 클래스 인터페이스를 사용하여 구현됩니다. 일련의 기능은 인터페이스에 정의되어 있지만 기능을 구현하려면 프로그래머가 하나씩 구현해야 하므로 소프트웨어 기능의 무결성이 보장됩니다.

1. 인터페이스의 정의

 인터페이스는 함수형 클래스가 아니므로 인터페이스 클래스에서는 특정 함수 구현 방식을 정의할 수 없습니다.

 인터페이스 정의 시 인터페이스 키워드를 사용하며 명명 형식은 I+인터페이스 이름입니다.

일반적으로 인터페이스에 정의된 멤버는 함수형 클래스의 메서드여야 하며 함수형 클래스의 멤버 속성이 될 수 없습니다.

  몇 가지 참고 사항:

  ①인터페이스 멤버에는 전역 액세스 권한이 있어야 하므로 액세스 한정자를 추가할 수 없습니다.

  ②인터페이스 멤버는 상수 및 정적 메서드와 같은 클래스 속성을 사용할 수 없습니다.

  4인터페이스는 클래스처럼 상속될 수 있습니다. 상속 후 하위 인터페이스는 상위 인터페이스의 모든 멤버를 가져옵니다.

2. 인터페이스 구현

 인터페이스는 기능만 정의할 수 있고 특정 기능을 구현할 수는 없습니다. 인터페이스에 정의된 기능을 구현하려면 일반 기능 클래스를 사용하여 구현해야 합니다.

 형식: 구현 + 인터페이스 이름

 참고: 인터페이스의 모든 멤버 메서드는 함수형 클래스에서 정의되어야 하며 누구도 빠질 수 없습니다.

다음은 간단한 예를 통해 설명됩니다.

인터페이스 파일에서 두 개의 인터페이스 Imyinterce, Imys(Imyinterface 하위 인터페이스)를 정의합니다.

<?php 
/**
*    定义接口Imyinterface
*/
interface Imyinterface{
    function add1();
    function add2($s);
    function add3($t=0);
}

//接口的继承
interface Imys extends Imyinterface{
    function del();
    function edit();
    function update($str);
    function select($id,$str);
}

?>

그런 다음 인터페이스를 구현하지 않은 경우 기능 클래스를 정의하여 인터페이스를 구현합니다. 아직 함수를 파악했습니다. 이를 구현하는 방법은 생략할 수 없는 빈 메서드를 통해 달성할 수 있습니다. 그렇지 않으면 오류가 보고되어 기능 클래스에 구현해야 하는 추상 메서드가 포함되어 있음을 나타냅니다.


여기에서는 하위 인터페이스 Imy의 업데이트 및 선택 메서드만 구현됩니다. 다른 메서드는 아직 구현되지 않았으며 대신 빈 메서드를 사용합니다.

<?php 
require "./Imyinterface.interface.php";
class MyClass implements Imys{
    function add1(){
        //空方法,暂无具体实现方法,虽然功能类继承Imys,但是接口Imys又继承Imyinterface,因此Imyinterface里的方法也必须要实现
    }
    function add2($str){
        //同上
    }
    function add3($t=0){
        //同上
    }
    function del(){
        //空方法,暂无具体实现方法
    }
    function edit(){
        //空方法,暂无具体实现方法
    }
    function update($str="字符串"){
        return $str;
    }
    function select($id=0,$str="字符串"){
        return $id.$str;
    }

}
?>

테스트 코드

<?php 
require "./MyClass.class.php";
header("Content-type:text/html;charset=utf-8");

$mys =new MyClass();
echo $mys->select();
?>

탐색 효과

위에서 소개한 것처럼 대규모 소프트웨어 설계에서는 프로그램을 표준화하고 통일하기 위해 인터페이스를 주로 사용합니다. 그러나 인터페이스는 프로그램의 추상 기능만 정의할 수 있으며 특정 기능을 제공하지 않습니다. 상수, 정적 속성과 같은 일반적인 클래스 멤버는 인터페이스에서 정의할 수 없습니다.

추상 클래스는 클래스 상속을 위해 설계되었습니다. 일반 클래스 멤버는 추상 클래스에서 정의할 수 있습니다. 이 시점에서 추상 클래스는 인터페이스보다 훨씬 유연합니다.

추상 클래스를 정의할 때 추상 키워드를 추가한 다음 추상 클래스에 일반 멤버 메서드를 정의해야 합니다. 이 일반 메서드에는 특정 기능 코드가 필요하지 않습니다.

대부분의 MVC 프레임워크는 PHP 추상 클래스를 사용하여 구축됩니다. 추상 클래스는 간단히 일반 클래스와 인터페이스의 조합, 즉 추상=클래스+인터페이스로 이해하면 됩니다.

인터페이스와 추상 클래스의 공통점:

 ①인터페이스나 추상 클래스 모두 인스턴스화할 수 없습니다. 인터페이스는 Implements 키워드를 사용하여 구현해야 하지만, 추상 클래스는 일반 클래스의 확장 키워드를 사용하여 상속합니다.

 ②인터페이스와 추상 클래스에는 아직 구현되지 않은 메서드 선언이 포함되어 있습니다.

 3 파생 클래스는 구현되지 않은 메서드를 구현해야 하고, 추상 클래스는 추상 메서드이며, 인터페이스는 모두 멤버입니다.

인터페이스와 추상 클래스의 차이점:

 ①추상 클래스는 봉인할 수 없지만 인터페이스는 봉인할 수 있습니다.

 ②추상 클래스로 구현된 특정 메서드는 기본적으로 가상이지만, 인터페이스를 구현하는 클래스 메서드는 기본적으로 실제입니다.

  ③추상 클래스는 구현 클래스가 구현할 클래스의 기본 클래스 목록에 모든 멤버를 나열해야 하지만 인터페이스는 빈 메서드를 허용합니다.

인터페이스와 추상 클래스의 개념을 이해한 후, 추상 클래스의 정의와 구현에 대해 자세히 살펴보겠습니다.

在PHP中,抽象类不能为空类或普通类,至少需要提供一个抽象方法,而抽象类和抽象方法都需要关键字abstract。

例如,定义一个简单的CURD抽象类(数据库的增删改查)

<?php 
/**
*    抽象类的定义
*/
abstract class BaseClass{
    //查询,抽象方法
    abstract function query($sql);
    //插入,抽象方法
    abstract function insert($sql);
    //更新,抽象方法
    abstract function update($sql);
    //删除,抽象方法
    abstract function delete($sql);

    //数据库连接,普通类方法
    protected $link;
    //sql语句
    protected $sql;
    //结果
    protected $arr;
    protected function Conn(){
        $this->link=mysql_connect("localhost","root","123") or die("数据库连接失败").mysql_error();
        if($this->link){
            mysql_select_db("db_match",$this->link) or die("数据库选择失败").mysql_error();
        }
        return $this->link;
    }
    //关闭数据库连接,普通类方法
    protected function CloseConn(){
        mysql_close($this->link);
    }
}
?>

抽象类的实现

<?php 
require "./BaseClass.class.php";    //引入抽象类
/**
*    实现抽象类
*/

class MyClass extends BaseClass {

    //实现抽象中的抽象方法,抽象类中抽象方法:query()、insert()、update()、delete()
    function query($sql){
        $this->Conn($this->link);
        $this->sql=$sql;
        $result=mysql_query($this->sql);
        while($row=mysql_fetch_assoc($result)){
            $this->arr=$row;
        }
        $this->CloseConn($this->link);    //关闭连接
        return print_r($this->arr);
    }

    function insert($sql){
        $this->Conn($this->link);
        $this->sql=$sql;
        mysql_query($this->sql,$this->link);
        $this->CloseConn($this->link);    //关闭连接
    }

    function update($sql){
        $this->Conn($this->link);
        $this->sql=$sql;
        mysql_query($this->sql,$this->link);
        $this->CloseConn($this->link);    //关闭连接
    }
    function delete($sql){
        $this->Conn($this->link);
        $this->sql=$sql;
        mysql_query($this->sql,$this->link);
        $this->CloseConn($this->link);    //关闭连接
    }
}
?>

测试代码

<?php 
require "./MyClass.class.php";
header("Content-type:text/html;charset=utf-8");

$mys =new MyClass();
$mys->query("select * from `match`");
//输出结果:Array ( [m_id] => 8 [t1_id] => 5 [t2_id] => 6 [t1_score] => 2 [t2_score] => 1 [m_time] => 1421571600 )
$mys->insert("insert into `match`(m_id,t1_id,t2_id,t1_score,t2_score,m_time) values(9,5,3,3,3,1451571600)");
//添加成功
$mys->update("update `match` set m_time =1111111111 where m_id=9");
//修改成功
$mys->delete("delete from `match` where m_id=9");
//删除成功
?>

 相关教程:PHP视频教程

위 내용은 PHP의 객체지향 프로그래밍의 기본에 대해 이야기해 보겠습니다. (2)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제