> 백엔드 개발 > PHP 튜토리얼 > 코드는 모두 'PHP 디자인 패턴' 책에 있습니다.

코드는 모두 'PHP 디자인 패턴' 책에 있습니다.

WBOY
풀어 주다: 2016-07-25 09:08:46
원래의
848명이 탐색했습니다.
代码均来源于 《PHP设计模式》一书
  1. ?/**
  2. * "PHP 디자인 패턴" 6장: 데코레이터 패턴에서 재인쇄됨
  3. *
  4. * 데코레이터 디자인 패턴은 다음 작업 공간에 적합합니다. 요구 사항의 변경이 빠르고 작으며 애플리케이션에 거의 영향을 미치지 않습니다. .다른 부분. ()
  5. * 데코레이터 디자인 패턴을 사용하여 클래스를 디자인하는 목표는 기존 기능 코드를 다시 작성할 필요 없이 객체에 점진적인 변경 사항을 적용하는 것입니다.
  6. * 데코레이터 디자인 패턴은 다른 코드 흐름에 영향을 주지 않고 기본 코드 흐름에서 대상 객체를 변경하거나 "장식"하는 하나 이상의 데코레이터를 직접 삽입할 수 있는 방식으로 구축되었습니다.
  7. *
  8. */
  9. class CD {
  10. public $trackList;
  11. public function __construct () {
  12. $this->trackList = array();
  13. }
  14. 공개 함수 addTrack($track) {
  15. $this->trackList[] = $track;
  16. }
  17. 공용 함수 getTrackList() {
  18. $output = '';
  19. foreach ($this->trackList as $num => $track) {
  20. $output .= ($num 1) . ") {$track}.";
  21. }
  22. return $output;
  23. }
  24. }
  25. $tracksFroExternalSource = array("의미", "Brr ", "작별 인사");
  26. $myCD = 새 CD();
  27. foreach ($tracksFroExternalSource as $track) {
  28. $myCD->addTrack($track);
  29. }
  30. print "CD에는 다음이 포함됩니다:{$myCD->getTrackList()}n";
  31. /**
  32. * 요구사항의 작은 변경: 각 출력 매개변수가 대문자여야 합니다. 이러한 작은 변경의 경우 가장 좋은 접근 방식은 기본 클래스를 수정하거나 상위-하위 관계를 생성하는 것이 아니라
  33. 객체를 생성하는 것입니다. 데코레이터 디자인 패턴을 기반으로 합니다.
  34. *
  35. */
  36. class CDTrackListDecoratorCaps {
  37. private $_cd;
  38. 공용 함수 __construct(CD $cd) {
  39. $this->_cd = $cd;
  40. }
  41. 공용 함수 makeCaps() {
  42. foreach ($this->_cd->trackList as & $track) {
  43. $track = strtoupper($track);
  44. }
  45. }
  46. }
  47. $myCD = 새 CD();
  48. foreach($tracksFroExternalSource as $track) {
  49. $myCD->addTrack($track);
  50. }
  51. //新增以下代码实现输출参数采用大写shape式
  52. $myCDCaps = new CDTrackListDecoratorCaps($myCD);
  53. $myCDCaps->makeCaps();
  54. print "CD에 포함된 항목:{$myCD->getTrackList() }n";
  55. /* Decorator.class.php 끝 */
  56. /* Design/Decorator.class.php 파일 위치 */
复system代码
  1. ?/**
  2. * "PHP 디자인 패턴" 7장: 위임 패턴에서 재인쇄
  3. * 객체가 결정에 따라 실행되어야 하는 여러 복잡하고 독립적인 기능 부분을 포함하는 경우 가장 좋은 방법은 위임 기반 디자인 패턴 객체를 적용하는 것입니다. .
  4. *
  5. */
  6. /**
  7. * 예: 웹사이트에는 MP3 파일의 재생 목록을 생성하는 기능이 있고, 재생 목록을 M3U 또는 PLS 형식으로 다운로드하도록 선택하는 기능도 있습니다.
  8. *
  9. * 다음 코드 예제는 일반 모드와 위임 모드의 두 가지 모드 구현을 보여줍니다.
  10. *
  11. */
  12. //常规实现
  13. 클래스 재생목록 {
  14. 비공개 $_songs;
  15. 공용 함수 __construct() {
  16. $this->_songs = array();
  17. }
  18. 공용 함수 addSong($location, $title) {
  19. $song = array("location" => $location, "title" => $title);
  20. $this->_songs[] = $song;
  21. }
  22. 공개 function getM3U() {
  23. $m3u = "#EXTM3Unn";
  24. foreach ($this->_songs as $song) {
  25. $m3u .= "#EXTINF: -1, { $song['title']}n";
  26. $m3u .= "{$song['location']}n";
  27. }
  28. return $m3u;
  29. }
  30. 공개 함수 getPLS() {
  31. $pls = "[재생 목록]]nNumberOfEntries = ". count($this->_songs) . "nn";
  32. foreach ($this->_songs as $songCount => $song) {
  33. $counter = $songCount 1;
  34. $pls .= "파일{$counter } = {$song['location']}n";
  35. $pls .= "제목{$counter} = {$song['title']}n";
  36. $pls .= "길이P{ $counter} = -1 nn";
  37. }
  38. return $pls;
  39. }
  40. }
  41. $playlist = new Playlist();
  42. $playlist->addSong("/home/aaron/music/brr.mp3", "Brr");
  43. $playlist->addSong("/home/aaron/music/goodbye.mp3", " 안녕히 계세요");
  44. $externalRetrievedType = "pls";
  45. if ($externalRetrievedType == "pls") {
  46. $playlistContent = $playlist->getPLS();
  47. } else {
  48. $playlistContent = $playlist->getM3U();
  49. }
  50. echo $playlistContent;
  51. //委托模式实现
  52. class newPlaylist {
  53. 비공개 $_songs;
  54. 비공개 $_tyepObject;
  55. 공개 함수 __construct($type) {
  56. $this->_songs = array();
  57. $ object = "{$type}Playlist";
  58. $this->_tyepObject = new $object;
  59. }
  60. 공개 함수 addSong($location, $title) {
  61. $song = array("위치" => $위치, "제목" => $title);
  62. $this->_songs[] = $song;
  63. }
  64. public function getPlaylist() {
  65. $playlist = $this->_tyepObject-> getPlaylist($this->_songs);
  66. return $playlist;
  67. }
  68. }
  69. class m3uPlaylist {
  70. public function getPlaylist($songs) {
  71. $m3u = "#EXTM3Unn";
  72. foreach ($songs as $song) {
  73. $m3u .= "#EXTINF: -1, {$song['title']}n";
  74. $m3u .= "{$song['location']}n";
  75. }
  76. return $m3u;
  77. }
  78. }
  79. class plsPlaylist {
  80. 공개 함수 getPlaylist($songs) {
  81. $pls = "[재생 목록]]nNumberOfEntries = ". 개수($노래) . "nn";
  82. foreach ($songs as $songCount => $song) {
  83. $counter = $songCount 1;
  84. $pls .= "File{$counter} = {$ 노래['location']}n";
  85. $pls .= "제목{$counter} = {$song['title']}n";
  86. $pls .= "길이P{$counter} = -1 nn";
  87. }
  88. return $pls;
  89. }
  90. }
  91. $externalRetrievedType = "pls";
  92. $playlist = new newPlaylist($ externalRetrievedType);
  93. $playlist->addSong("/home/aaron/music/brr.mp3", "Brr");
  94. $playlist->addSong("/home/aaron/ music/goodbye.mp3", "Goodbye");
  95. $playlistContent = $playlist->getPlaylist();
  96. echo $playlistContent;
  97. /* 끝 Delegate.class.php */
  98. /* Design/Delegate.class.php 파일 위치 */
复主代码
  1. ?/**
  2. * "PHP 디자인 패턴" 8장: 모양 패턴에서 재인쇄
  3. * 모양 디자인 패턴의 목표는 복잡한 외부 관계를 제어하고 위 구성 요소의 기능을 활용할 수 있는 간단한 인터페이스를 제공하는 것입니다.
  4. * 비즈니스 프로세스의 특정 단계를 수행하는 데 필요한 복잡한 방법과 논리 그룹을 숨기기 위해서는 외관 디자인 패턴을 기반으로 하는 클래스를 사용해야 합니다.
  5. *
  6. */
  7. /**
  8. * 코드 예: CD 개체를 가져오고 모든 속성에 대문자를 적용한 다음 웹 서비스에 제출할 완전한 형식의 XML 문서를 만듭니다.
  9. *
  10. */
  11. 수업 CD {
  12. public $tracks = array();
  13. public $band = '';
  14. public $title = '';
  15. public function __construct($tracks, $band, $title) {
  16. $this->tracks = $tracks;
  17. $this->band = $band;
  18. $this->title = $title;
  19. }
  20. }
  21. class CDUpperCase {
  22. public static function makeString(CD $cd, $type) {
  23. $cd->$type = strtoupper($cd->$type);
  24. }
  25. 공개 정적 함수 makeArray(CD $cd, $type) {
  26. $cd->$type = array_map("strtoupper", $cd->$type);
  27. }
  28. }
  29. class CDMakeXML {
  30. public static function create(CD $cd) {
  31. $doc = new DomDocument();
  32. $root = $doc->createElement("CD");
  33. $root = $doc->appendChild($root);
  34. $title = $doc->createElement("TITLE", $cd->title);
  35. $title = $root->appendChild($title);
  36. $band = $doc->createElement("BAND", $cd-> band);
  37. $band = $root->appendChild($band);
  38. $tracks = $doc->createElement("TRACKS");
  39. $tracks = $root- >appendChild($tracks);
  40. foreach ($cd->$track으로 트랙) {
  41. $track = $doc->createElement("TRACK", $track);
  42. $track = $tracks->appendChild($track);
  43. }
  44. return $doc->saveXML();
  45. }
  46. }
  47. class WebServiceFacade {
  48. 공개 정적 함수 makeXMLCall(CD $cd) {
  49. CDUpperCase::makeString($cd, "title");
  50. CDUpperCase::makeString($cd, "band");
  51. CDUpperCase::makeArray($cd, "tracks");
  52. $xml = CDMakeXML::create($cd);
  53. return $xml;
  54. }
  55. }
  56. $tracksFromExternalSource = array("What It Means", "Brr", "Goodbye");
  57. $band = "다시는 안 해";
  58. $title = "갈비뼈 낭비 ";
  59. $cd = 새 CD($tracksFromExternalSource, $band, $title);
  60. $xml = WebServiceFacade::makeXMLCall($cd);
  61. echo $ xml;
  62. /* Facade.class.php 끝 */
  63. /* Design/Facade.class.php 파일 위치 */
复代码
  1. ?/**
  2. * "PHP 디자인 패턴" 9장에서 재인쇄됨: 팩토리 패턴
  3. * 팩토리 디자인 패턴: 호출 코드가 실제로 인스턴스화하는 단계를 결정하지 않도록 하면서 객체의 새 인스턴스를 얻기 위한 인터페이스를 제공합니다. 기본 클래스
  4. *
  5. */
  6. //기본 표준 CD 클래스
  7. 클래스 CD {
  8. 공개 $tracks = array();
  9. 공개 $band = '';
  10. 공개 $title = '';
  11. 공개 함수 __construct() {}
  12. 공개 함수 setTitle( $title) {
  13. $this->title = $title;
  14. }
  15. 공개 함수 setBand($band) {
  16. $this->band = $band;
  17. }
  18. 공개 함수 addTrack($track) {
  19. $this->tracks[] = $track;
  20. }
  21. }
  22. // Enhanced CD 클래스, 표준 CD와의 유일한 차이점은 CD에 기록된 첫 번째 트랙이 데이터 트랙("DATA TRACK")
  23. class EnhancedCD {
  24. public $tracks = array();
  25. 공개 $band = '';
  26. 공개 $title = '';
  27. 공개 함수 __construct() {
  28. $this->tracks = "DATA TRACK";
  29. }
  30. 공용 함수 setTitle($title) {
  31. $this->title = $title;
  32. }
  33. 공용 함수 setBand($band) {
  34. $this -> ;band = $band;
  35. }
  36. 공개 함수 addTrack($track) {
  37. $this->tracks[] = $track;
  38. }
  39. }
  40. //위 두 클래스의 특정 인스턴스화 작업을 구현하는 CD 팩토리 클래스
  41. class CDFactory {
  42. public static function create($type) {
  43. $class = strtolower( $ type) . "CD";
  44. return new $class;
  45. }
  46. }
  47. //인스턴스 작업
  48. $type = "enhadced";
  49. $cd = CDFactory::create($type);
  50. $tracksFromExternalSource = array("의미", "Brr", "작별 인사");
  51. $cd- > ;setBand("다시는 안 함");
  52. $cd->setTitle("갈비뼈 낭비");
  53. foreach ($tracksFromExternalSource as $track) {
  54. $cd->addTrack( $ track);
  55. }
  56. /* Factory.class.php 끝 */
  57. /* 파일 끝 Design/Factory.class.php */
코드 복사
  1. ?/**
  2. * "PHP 디자인 패턴" 10장: 인터프리터 패턴에서 재인쇄됨
  3. * 인터프리터: 인터프리터 디자인 패턴은 엔터티의 핵심 요소를 분석하고 각 요소 작업에 대한 고유한 설명이나 해당 응답을 제공하는 데 사용됩니다.
  4. * 인터프리터 디자인 패턴은 PHP/HTML 템플릿 시스템에서 가장 일반적으로 사용됩니다.
  5. *
  6. */
  7. class User {
  8. protected $_username = "";
  9. 공용 함수 __construct($username) {
  10. $this->_username = $username;
  11. }
  12. 공용 함수 getProfilePage() {
  13. $profile = "";
  14. $profile .= "저는 그들의 노래를 모두 좋아합니다. 제가 가장 좋아하는 CD는
    ";
  15. $profile .= "{{ myCD.getTitle}}!!";
  16. return $profile;
  17. }
  18. }
  19. class userCD {
  20. protected $_user = NULL;
  21. 공용 함수 setUser(User $user) {
  22. $this->_user = $user;
  23. }
  24. 공용 함수 getTitle() {
  25. $title = "폐기물 갈비뼈";
  26. return $title;
  27. }
  28. }
  29. class userCDInterpreter {
  30. protected $_user = NULL;
  31. 공용 함수 setUser(사용자 $user) {
  32. $this->_user = $user;
  33. }
  34. 공용 함수 getInterpreted() {
  35. $profile = $this->_user ->getProfilePage();
  36. if (preg_match_all('/{{myCD.(.*?)}}/', $profile, $triggers, PREG_SET_ORDER)) {
  37. $replacements = 배열 ();
  38. foreach ($trigger를 $trigger로) {
  39. $replacements[] = $trigger[1];
  40. }
  41. $replacements = array_unique($replacements) ;
  42. $myCD = new userCD();
  43. $myCD->setUser($this->_user);
  44. foreach ($replacements를 $replacement로) {
  45. $profile = str_replace("{{myCD.{$replacement}}}", call_user_func(array($myCD, $replacement)), $profile);
  46. }
  47. }
  48. return $profile;
  49. }
  50. }
  51. $username = "aaron";
  52. $user = 새 사용자($username);
  53. $interpreter = 새 userCDInterpreter() ;
  54. $interpreter->setUser($user);
  55. 인쇄 "

    {$username}님의 프로필

    ";
  56. 인쇄 $interpreter->getInterpreted ();
  57. /* Interpreter.class.php 끝 */
  58. /* Design/Interpreter.class.php 파일 위치 */
코드 복사
  1. ?/**
  2. * "PHP 디자인 패턴" 11장: 반복자 패턴에서 재인쇄됨
  3. * 반복자: 반복자 디자인 패턴은 셀 수 있는 모든 유형의 데이터를 반복하거나 반복하기 위한 단일 표준 인터페이스를 제공할 수 있는 특정 개체를 구성하는 데 도움이 됩니다.
  4. * 순회해야 하는 셀 수 있는 데이터를 처리할 때 가장 좋은 솔루션은 반복자 디자인 패턴을 기반으로 객체를 생성하는 것입니다.
  5. *
  6. */
  7. class CD {
  8. public $band = "";
  9. 공개 $title = "";
  10. 공개 $trackList = array();
  11. 공개 함수 __construct($band, $title) {
  12. $this->band = $band;
  13. $this->title = $title;
  14. }
  15. 공개 함수 addTrack($track) {
  16. $this->trackList[] = $track;
  17. }
  18. }
  19. class CDSearchByBandIterator는 Iterator를 구현합니다.
  20. $db = mysql_connect("localhost", "root", "root");
  21. mysql_select_db("test");
  22. $sql = "CD.id, CD.band, CD.title, Tracks.tracknum, Tracks.title as tracktitle ";
  23. $sql .= "CD에서 CD 왼쪽 조인 트랙 CD.id =tracks.cid ";
  24. $sql .= "여기서 band = ' " . mysql_real_escape_string($bandName) . "' ";
  25. $sql .= "tracks.tracknum별 순서";
  26. $results = mysql_query($sql);
  27. $cdID = 0;
  28. $cd = NULL;
  29. while ($result = mysql_fetch_array($results)) {
  30. if ($result["id"] !== $cdID) {
  31. if ( ! is_null($cd )) {
  32. $this->_CDs[] = $cd;
  33. }
  34. $cdID = $result['id'];
  35. $cd = 새 CD($result ['밴드'], $result['title']);
  36. }
  37. $cd->addTrack($result['tracktitle']);
  38. }
  39. $this->_CDs[] = $cd;
  40. }
  41. 공개 함수 next() {
  42. $this->_valid = (next($this->_CDs) = == 거짓) ? FALSE : TRUE;
  43. }
  44. 공개 함수 rewind() {
  45. $this->_valid = (reset($this->_CDs) === FALSE) ? FALSE : TRUE;
  46. }
  47. public function valid() {
  48. return $this->_valid;
  49. }
  50. public function current() {
  51. return current($this->_CDs);
  52. }
  53. 공개 함수 키() {
  54. return key($this->_CDs);
  55. }
  56. }
  57. $queryItem = "다시는 안 함";
  58. $cds = new CDSearchByBandIterator($queryItem);
  59. print "

    다음 CD를 찾았습니다

    " ;
  60. "< /tr>";
  61. foreach ($cds를 $cd로) {
  62. print "
  63. ";
  64. }
  65. 인쇄 "
  66. 밴드Ttile트랙 수
    {$cd->band}{$cd ->title}";
  67. 인쇄 횟수($cd->trackList). "
  68. ";
  69. /* Iterator.class.php의 끝 */
  70. / * Design/Iterator.class.php 파일 위치 지정 */
  71. 复代码
    1. ?/**
    2. * "PHP 디자인 패턴" 12장: 중재자 패턴에서 재인쇄됨
    3. * 중재자: 중재자 디자인은 유사한 객체가 서로 직접 전파되거나 조정되지 않을 때 사용할 수 있는 객체를 개발하는 데 사용되어서는 안 됩니다. 이러한 객체의 컬렉션 수정
    4. * 유사한 속성을 갖고 속성을 동기화해야 하는 결합되지 않은 객체를 처리할 때 가장 좋은 방법은 Mediator 디자인 패턴을 기반으로 객체를 사용하는 것입니다.
    5. *
    6. */
    7. /**
    8. * 테스트 사례 설명: 샘플 코드를 통해 밴드는 자신의 음악 컬렉션을 입력하고 관리할 수 있을 뿐만 아니라 구성 파일을 업데이트하고 밴드 관련 정보를 수정하며 CD 정보를 업데이트할 수 있습니다.
    9. * 아티스트 이제 MP3를 업로드할 수 있습니다. 웹사이트에서 CD를 수집하고 제거하세요. 따라서 웹사이트에서는 해당 CD와 MP3를 서로 동기화된 상태로 유지해야 합니다.
    10. *
    11. */
    12. //CD类
    13. class CD {
    14. public $band = '';
    15. public $title = '';
    16. protected $_mediator;
    17. public function __construct(MusicContainerMediator $mediator = NULL) {
    18. $this->_mediator = $mediator;
    19. }
    20. 공용 함수 save() {
    21. //具体实现待정
    22. var_dump($this);
    23. }
    24. 공용 함수changeBandName($bandname) {
    25. if ( !is_null($this->_mediator)) {
    26. $this->_mediator->change($this, array(" band" => $bandname));
    27. }
    28. $this->band = $bandname;
    29. $this->save();
    30. }
    31. }
    32. //MP3Archive类
    33. class MP3Archive {
    34. protected $_mediator;
    35. 공개 함수 __construct(MusicContainerMediator $mediator = NULL) {
    36. $this->_mediator = $mediator;
    37. }
    38. 공용 함수 save() {
    39. //具体实现待정
    40. var_dump($this);
    41. }
    42. 공용 함수changeBandName( $bandname) {
    43. if ( !is_null($this->_mediator)) {
    44. $this->_mediator->change($this, array("band" => $bandname)) ;
    45. }
    46. $this->band = $bandname;
    47. $this->save();
    48. }
    49. }
    50. //中介者类
    51. class MusicContainerMediator {
    52. protected $_containers = array();
    53. public function __construct() {
    54. $this->_containers[] = "CD";
    55. $this->_containers[] = "MP3Archive";
    56. }
    57. 공개 함수 변경($originalObject, $newValue) {
    58. $title = $originalObject->title;
    59. $band = $originalObject->band;
    60. foreach ($this->_containers as $container) {
    61. if ( ! ($originalObject 인스턴스of $container)) {
    62. $object = new $container;
    63. $object->title = $title;
    64. $object->band = $band;
    65. foreach ($newValue as $key => $val) {
    66. $object->$key = $val;
    67. }
    68. $object->save();
    69. }
    70. }
    71. }
    72. }
    73. //测试实例
    74. $titleFromDB = "갈비뼈 낭비";
    75. $bandFromDB = "다시는 안 함";
    76. $mediator = 새 MusicContainerMediator();
    77. $cd = 새 CD($mediator);
    78. $cd->title = $titleFromDB;
    79. $cd->band = $bandFromDB;
    80. $cd->changeBandName("Maybe Once More");
    81. /* Mediator.class.php 끝 */
    82. /* 파일 위치 디자인 /Mediator.class.php */
    复代码
    1. /*
    2. SQLyog 企业版 - MySQL GUI v8.14
    3. MySQL - 5.1.52-community : 데이터베이스 - 테스트
    4. ***** ************************************************** ************
    5. */
    6. /*!40101 SET NAMES utf8 */;
    7. /*!40101 SET SQL_MODE=''*/ ;
    8. /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
    9. /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
    10. / *!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
    11. /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
    12. /*테이블의 테이블 구조 ` cd` */
    13. `cd`가 존재하는 경우 테이블 삭제;
    14. CREATE TABLE `cd` (
    15. `id` int(8) NOT NULL AUTO_INCREMENT,
    16. `band` varchar(500) COLLATE latin1_bin NOT NULL DEFAULT '',
    17. `title` varchar(500) COLLATE latin1_bin NOT NULL DEFAULT '',
    18. `bought` int(8) DEFAULT NULL,
    19. `amount` int (8) DEFAULT NULL,
    20. PRIMARY KEY (`id`)
    21. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 COLLATE=latin1_bin;
    22. /*`cd` 테이블에 대한 데이터 * /
    23. `cd`(`id`,`band`,`title`,`bought`,`amount`) 값에 삽입(1,'Never Again','Waster of a Rib',1 ,98);
    24. /*`tracks` 테이블의 테이블 구조 */
    25. DROP TABLE IF EXISTS `tracks`;
    26. CREATE TABLE `tracks`(
    27. `cid` int(8) DEFAULT NULL,
    28. `tracknum` int(8) DEFAULT NULL,
    29. `title` varchar(500) COLLATE latin1_bin NOT NULL DEFAULT ''
    30. ) ENGINE=InnoDB DEFAULT CHARSET= latin1 COLLATE=latin1_bin;
    31. /*`tracks` 테이블의 데이터 */
    32. `tracks`(`cid`,`tracknum`,`title`) 값에 삽입(1, 3,'의미'),(1,3,'Brr'),(1,3,'안녕');
    33. /*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
    34. /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
    35. /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
    36. /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;
    제제대码


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿