백엔드 개발 PHP 튜토리얼 PHP에서 팩토리 패턴 사용

PHP에서 팩토리 패턴 사용

Dec 17, 2016 am 11:21 AM

팩토리 클래스는 다른 객체를 생성하는 데 특별히 사용되는 메서드를 포함하는 클래스를 말합니다. 팩토리 클래스는 클래스의 동적 교체, 구성 수정을 허용하고 일반적으로 애플리케이션을 만드는 데 중요합니다. 고급 PHP 개발자가 팩토리 패턴에 더욱 유연하고 능숙해지는 것이 중요합니다.

팩토리 패턴은 일반적으로 유사한 인터페이스를 준수하는 다양한 클래스를 반환하는 데 사용됩니다. 팩토리의 일반적인 용도는 다형성 공급자를 생성하여 애플리케이션 논리 또는 구성 설정에 따라 인스턴스화해야 하는 클래스를 결정할 수 있도록 하는 것입니다. 예를 들어, 애플리케이션의 다른 부분을 리팩터링할 필요 없이 새 확장 이름을 사용하도록 해당 공급자를 사용하여 클래스를 확장할 수 있습니다.

일반적으로 팩토리 패턴에는 기본적으로 Factory라는 이름의 정적 메서드가 있지만 이는 원칙일 뿐이며 이 정적 메서드는 임의로 이름을 지정할 수도 있습니다. 모든 데이터의 매개변수를 허용합니다. 객체를 반환해야 합니다.

기본 팩토리 클래스

1

2

3

4

5

6

7

8

9

10

11

class MyObject{ 

  //对象将从工厂返回 

   

class MyFactory{ 

public static function factory(){ 

return new MyObject(): 

   

   

$instance=MyFactory::factory();

로그인 후 복사

팩토리 클래스를 사용하여 이미지 파일 구문 분석

Php 코드

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

<?php 

interface IImage{ 

    function getHeight(); 

    function getWidth(); 

    function getData(); 

   

class Image_PNG implements IImage{ 

       

    private $_width,$_height,$_data

       

    public function __construct($file){ 

        $this->_file=$file

        $this->_parse(); 

    

           

    private function _parse(){ 

               

            //完成PNG格式的解析工作 

            //并填充$_width,$_height,$_data; 

        

           

           

    public function getWidth(){ 

        return $this->_width; 

    

    public  function getHeight(){ 

        return $this->_height; 

    

       

    public function getData(){ 

       return $this->_data; 

       

    

       

   

class Image_JPEG implements IImage{ 

       

    private $_width,$_height,$_data

       

    public function __construct($file){ 

        $this->_file=$file

        $this->_parse(); 

    

           

    private function _parse(){ 

               

            //完成JPEG格式的解析工作 

            //并填充$_width,$_height,$_data; 

        

           

           

    public function getWidth(){ 

        return $this->_width; 

    

    public  function getHeight(){ 

        return $this->_height; 

    

       

    public function getData(){ 

       return $this->_data; 

       

    

       

   

class ImageFactory{ 

       

    public static function factory($file){ 

        $pathParts=pathinfo($file); 

        switch (strtolower($pathParts['extension'])) 

        

            case 'jpg': 

                $ret=new Image_JPEG($file); 

                break

            case 'png': 

                $ret=new Image_PNG($file); 

                break

                default

                    //有问题 

   

                       

        

        if($ret instanceof IImage){ 

            return $ret

        }else

            //有问题 

        

    

   

//当使用图像文件名调用 工厂方法时,根据传入的文件类型不同,取得不同对象。

로그인 후 복사

Php 코드

1

2

3

4

//调用ImageFactoyr 

$image=ImageFactory::factory('/path/to/my.jpg'); 

//$image是Image_JPEG类的一个实例 

echo $image->getWidth();

로그인 후 복사

팩토리 클래스를 사용하여 데이터베이스 이식성 문제를 해결하세요. 데이터베이스 애플리케이션에서 팩토리 패턴은 다음 두 가지 측면에서 작동할 수 있습니다.

1. 소프트웨어가 사용자 기반을 확장하기 위해 다양한 데이터베이스 플랫폼을 더 쉽게 지원할 수 있도록 합니다.

2. 소프트웨어가 내부적으로 사용되며 데이터베이스를 수정해야 하는 경우 애플리케이션을 변경할 수 있습니다. 쉽게 다른 플랫폼으로 값 이동

코드에서 User라는 데이터베이스 테이블이 생성되어 이를 테스트합니다. 이 테이블은 email

<🎜이라는 varchar 유형 필드를 정의합니다. >

PHP 코드

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

&lt;?php 

interface IDatabaseBindings{ 

    public function userExists($email); 

   

class PGSQL implements IDatabaseBindings{ 

    protected $_connection

       

    public function __construct(){ 

           

        $this-&gt;_connection=pg_connect(&#39;dbname=example_db&#39;); 

    

       

    public function userExists($email){ 

           

        $emailEscaped=pg_escape_string($email); 

        $query=&quot;select 1 from users where email=&#39;&quot;.$emailEscaped.&quot;&#39;&quot;; 

        if($result=pg_query($query,$this-&gt;_connection)){ 

            return (pg_num_rows($result)&gt;0)?true:false; 

        }else

            return false; 

        

    

       

   

class MYSQL implements IDatabaseBindings{ 

       

    protected $_connection

       

    public function __construct(){ 

           

        $this-&gt;_connection=mysql_connect(&#39;localhost&#39;); 

        mysql_select_db(&#39;example_db&#39;,$this-&gt;_connection); 

    

       

    public function userExists($email){ 

           

        $emailEscaped=mysql_real_escape_string($email); 

        $query=&quot;select 1 from users where email=&#39;&quot;.$emailEscaped.&quot;&#39;&quot;; 

        if($result=mysql_query($query,$this-&gt;_connection)){ 

            return (mysql_num_rows($result)&gt;0)?true:false; 

        }else

            return false; 

        

    

       

   

class DatabaseFactory{ 

       

    public static function factory(){ 

        $type=loadtypefromconfigfile(); 

        switch ($type){ 

            case &#39;PGSQL&#39;: 

                return new PGSQL(); 

                break

            case &#39;MYSQL&#39;: 

                return new MYSQL(); 

                break

        

    

}

로그인 후 복사
애플리케이션은 어떤 유형의 데이터베이스에 연결되어 있는지 알 필요가 없으며, PHP에서 정의한 규칙에 따라 팩토리에서 반환된 인스턴스만 직접 처리합니다. IDatabaseBindings 인터페이스.

PHP 코드

1

2

3

//调用DatabaseFactoy 

$db=DatabaseFactory::factory(); 

$db-&gt;userExists(&#39;person@example.com&#39;);

로그인 후 복사



PHP에서 팩토리 패턴 사용과 관련된 추가 기사 PHP 중국어 홈페이지를 주목해주세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) 11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄) Mar 03, 2025 am 10:49 AM

11 최고의 PHP URL 쇼트너 스크립트 (무료 및 프리미엄)

Instagram API 소개 Instagram API 소개 Mar 02, 2025 am 09:32 AM

Instagram API 소개

Laravel의 플래시 세션 데이터로 작업합니다 Laravel의 플래시 세션 데이터로 작업합니다 Mar 12, 2025 pm 05:08 PM

Laravel의 플래시 세션 데이터로 작업합니다

Laravel Back End : Part 2, React가있는 React 앱 구축 Laravel Back End : Part 2, React가있는 React 앱 구축 Mar 04, 2025 am 09:33 AM

Laravel Back End : Part 2, React가있는 React 앱 구축

Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Laravel 테스트에서 단순화 된 HTTP 응답 조롱 Mar 12, 2025 pm 05:09 PM

Laravel 테스트에서 단순화 된 HTTP 응답 조롱

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법 Mar 14, 2025 am 11:42 AM

PHP의 컬 : REST API에서 PHP Curl Extension 사용 방법

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트 Mar 13, 2025 pm 12:08 PM

Codecanyon에서 12 개의 최고의 PHP 채팅 스크립트

2025 PHP 상황 조사 발표 2025 PHP 상황 조사 발표 Mar 03, 2025 pm 04:20 PM

2025 PHP 상황 조사 발표

See all articles