PHP 는 대상 을 대상 으로 하 는 메모 장 기능 인 스 턴 스 를 기반 으로 합 니 다.

이 사례 는 PHP 가 대상 을 대상 으로 하 는 메모 장 기능 을 바탕 으로 하 는 것 을 보 여 준다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
메모 장 을 설계 하려 면 모든 것 이 메모 장 을 핵심 으로 하고 무엇이 무엇 인지 잡 으 며 절차 에 따라 내 려 옵 니 다.즉,사용자 가 정 보 를 작성 하 는->메모->전시 하 는 절차 에 따라 진행 합 니 다.
지금 은 대상 을 대상 으로 하 는 사고 로 이 문 제 를 생각 하고 대상 을 대상 으로 하 는 세계 에서 육안 으로 볼 수 있 는 것 과 보이 지 않 는 것 을 어떻게 든 생각 하지만 실제 존재 하 는 사물 이나 절 차 를 추상 화 할 것 이다.댓 글 북 이 라면 댓 글 내용 이라는 실체 가 존재 합 니 다.이 댓 글 실체(domain)는 댓 글 자의 이름,E-mail,댓 글 내용 등 요 소 를 포함해 야 합 니 다.아래 코드 와 같 습 니 다.

//     
class message
{
  public $name;//     
  public $email;//       
  public $content;//    
  public function __set($name,$value)
  {
    $this->$name = $value;
  }
  public function __get($name)
  {
    if(!isset($this->$name))
    {
      $this->$name = NULL;
    }
  }
}

위의 유형 은 바로 말 한 domain 으로 진실 하 게 존재 하고 추상 적 인 실체 모델 이다.그리고 메모 모형 이 필요 합 니 다.이 메모 모형 은 메모 본의 기본 속성 과 기본 조작 을 포함 하고 코드 는 다음 과 같 습 니 다.

class gbookModel
{
  private $bookPath;//     
  private $data;//    
  public function setBookPath($bookPath)
  {
    $this->bookPath = $bookPath;
  }
  public function getBookPath()
  {
    return $this->bookPath;
  }
  public function open()
  {
  }
  public function close()
  {
  }
  public function read()
  {
    return file_get_contents($this->bookPath);
  }
  //    
  public function write($data)
  {
    $this->data = self::safe($data)->name."&".self::safe($data)->email." said: ".self::safe($data)->content.PHP_EOL;
    return file_put_contents($this->bookPath,$this->data,FILE_APPEND);
  }
  //         ,      
  public static function safe($data)
  {
    $reflect = new ReflectionObject($data);
    $props = $reflect->getProperties();
    $messagebox = new stdClass();
    foreach($props as $props)
    {
      $ivar = $props->getName();
      $messagebox->$ivar = trim($props->getValue($data));
    }
    return $messagebox;
  }
  public function delete()
  {
    file_put_contents($this->bookPath,"it's empty now");
  }
}

실제 메 시 지 를 남 기 는 과정 은 더욱 복잡 할 수 있 고 일련의 준비 작업 과 log 처리 도 포함 할 수 있 으 므 로 데이터 담당 논리 적 처 리 를 정의 해 야 합 니 다.코드 는 다음 과 같 습 니 다.

class leaveModel
{
  public function write(gbookModel $gb, $data)
  {
    $book = $gb->getBookPath();
    $gb->write($data);
    //    
  }
}

마지막 으로 하나의 컨트롤 러 를 통 해 각종 조작 에 대한 패 키 징 을 책임 집 니 다.이 컨트롤 러 는 사용 자 를 대상 으로 하 는 것 이기 때문에 메모 장 보기,삭제,댓 글 등 기능 을 포함 합 니 다.이 컨트롤 러 는 바로 메모 장 이 제공 하 는 사용자 에 게 직접 제공 하 는 기능 으로 조작 디 테 일 을 밀봉 하고 컨트롤 러 의 해당 방법 만 호출 하면 된다.코드 는 다음 과 같다.

class authorControl
{
  public function message(leaveModel $l, gbookModel $g, message $data)
  {
    //       
    $l->write($g,$data);
  }
  public function view(gbookModel $g)
  {
    //       
    return $g->read();
  }
  public function delete(gbookModel $g)
  {
    $g->delete();
    echo self::view($g);
  }
}

테스트 코드 는 다음 과 같다.

$message = new message;
$message->name = 'chenqionghe';
$message->email = '[email protected]';
$message->content = 'chenqionghe is a handson boy.';
$gb = new authorControl();//            
$pen = new leaveModel();//   
$book = new gbookModel();//     
$book->setBookPath("E:\\chenqionghe.txt");
$gb->message($pen,$book,$message);
echo $gb->view($book);
//$gb->delete($book);

이렇게 보면 대상 을 향 한 과정 보다 훨씬 복잡 해 보이 지 않 습 니까?확실히 복잡 해 졌 고 코드 의 양 이 많아 져 서 이해 하기 어렵다.장점 을 드 러 내지 못 하 는 것 같다.그런데 다음 과 같은 생각 을 해 보 셨 나 요?
1.만약 에 많은 사람들 로 하여 금 이 메모 장 을 보완 하고 일부 실체 관계 의 구축 을 책임 지게 한다 면 한 사람 은 데이터 조작 층 의 코드 를 책임 지게 한다 면 더욱 쉽게 분업 할 수 있 지 않 을까요?
2.만약 에 제 가 이 메모 장 을 한층 더 개발 하여 데이터베이스 에 기록 하거나 페이지 기능 을 추가 하려 면 어떻게 해 야 합 니까?
위의 두 번 째 문제 가 제기 한 기능 을 실현 하려 면 gook Model 류 에 페이지 를 나 누 는 방법 을 추가 해 야 합 니 다.코드 는 다음 과 같 습 니 다.

public function readByPage()
{
    $handle = file($this->bookPath);
    $count = count($handle);
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
    if($page<1 || $page>$count)
      $page = 1;
    $pnum = 9;
    $begin = ($page-1) * $pnum;
    $end = ($begin+$pnum) > $count ? $count :$begin + $pnum;
    for($i=$begin; $i<$end; $i++)
    {
      echo '<strong>',$i+1,'</strong>',$handle[$i],'<br />';
    }
    for($i=1;$i<ceil($count/$pnum);$i++)
    {
      echo '<a href="?page='.$i.'" rel="external nofollow" rel="external nofollow" >'.$i.'</a>';
    }
}

그리고 전단 컨트롤 러 에 대응 하 는 action 을 추가 합 니 다.코드 는 다음 과 같 습 니 다.

public function viewByPage(gbookModel $g)
{
    return $g->readByPage();
}

실행 결 과 는 다음 과 같다.

이렇게 간단 한 두 단계 만 있 으 면 필요 한 페이지 기능 을 실현 할 수 있 고 기 존의 방법 은 수정 하지 않 고 관련 유형 에 방법 을 추가 하면 된다.물론 이 페이지 는 실제 클릭 할 때 문제 가 있 습 니 다.Action 을 분리 하지 않 고 한 페이지 에 모두 놓 여 있 기 때 문 입 니 다.위의 사고방식 을 대조 하면 메모 장 을 MySQL 데이터베이스 로 확장 할 수 있다.
이 프로그램 은 매우 간단 한 디자인 모델 만 나타 내 고 이 프로그램 은 아직도 개선 해 야 할 부분 이 많 으 며 모든 프로그래머 들 의 마음 속 에 자신의 OO 가 있다.프로젝트 가 클 수록 모듈 구분,대상 지향 의 장점 을 나 타 낼 수 있다.
다음은 완전한 코드 입 니 다.

<?php
//     
class message
{
  public $name;//     
  public $email;//       
  public $content;//    
  public function __set($name,$value)
  {
    $this->$name = $value;
  }
  public function __get($name)
  {
    if(!isset($this->$name))
    {
      $this->$name = NULL;
    }
  }
}
/**
 *      ,       
 * $bookpath:     
 */
class gbookModel
{
  private $bookPath;//     
  private $data;//    
  public function setBookPath($bookPath)
  {
    $this->bookPath = $bookPath;
  }
  public function getBookPath()
  {
    return $this->bookPath;
  }
  public function open()
  {
  }
  public function close()
  {
  }
  public function read()
  {
    return file_get_contents($this->bookPath);
  }
  public function readByPage()
  {
    $handle = file($this->bookPath);
    $count = count($handle);
    $page = isset($_GET['page']) ? intval($_GET['page']) : 1;
    if($page<1 || $page>$count)
      $page = 1;
    $pnum = 9;
    $begin = ($page-1) * $pnum;
    $end = ($begin+$pnum) > $count ? $count :$begin + $pnum;
    for($i=$begin; $i<$end; $i++)
    {
      echo '<strong>',$i+1,'</strong>',$handle[$i],'<br />';
    }
    for($i=1;$i<ceil($count/$pnum);$i++)
    {
      echo '<a href="?page='.$i.'" rel="external nofollow" rel="external nofollow" >'.$i.'</a>';
    }
  }
  //    
  public function write($data)
  {
    $this->data = self::safe($data)->name."&".self::safe($data)->email." said: ".self::safe($data)->content.PHP_EOL;
    return file_put_contents($this->bookPath,$this->data,FILE_APPEND);
  }
  //         ,      
  public static function safe($data)
  {
    $reflect = new ReflectionObject($data);
    $props = $reflect->getProperties();
    $messagebox = new stdClass();
    foreach($props as $props)
    {
      $ivar = $props->getName();
      $messagebox->$ivar = trim($props->getValue($data));
    }
    return $messagebox;
  }
  public function delete()
  {
    file_put_contents($this->bookPath,"it's empty now");
  }
}
class leaveModel
{
  public function write(gbookModel $gb, $data)
  {
    $book = $gb->getBookPath();
    $gb->write($data);
    //    
  }
}
class authorControl
{
  public function message(leaveModel $l, gbookModel $g, message $data)
  {
    //       
    $l->write($g,$data);
  }
  public function view(gbookModel $g)
  {
    //       
    return $g->read();
  }
  public function viewByPage(gbookModel $g)
  {
    return $g->readByPage();
  }
  public function delete(gbookModel $g)
  {
    $g->delete();
    echo self::view($g);
  }
}
$message = new message;
$message->name = 'chenqionghe';
$message->email = '[email protected]';
$message->content = 'chenqionghe is a handson boy.';
$gb = new authorControl();//            
$pen = new leaveModel();//   
$book = new gbookModel();//     
$book->setBookPath("E:\\chenqionghe.txt");
$gb->message($pen,$book,$message);
//echo $gb->view($book);
echo $gb->viewByPage($book);
//$gb->delete($book);

더 많은 PHP 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 PHP 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기