PHP 는 대상 을 대상 으로 하 는 메모 장 기능 인 스 턴 스 를 기반 으로 합 니 다.
9933 단어 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 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
laravel에 yo에서 angularJs&coffeescript를 사용할 수 있도록 한다.먼저 yo 명령을 사용할 수 있어야하므로 아래에서 설치 global에 설치한 곳에서 laravel의 프로젝트 루트로 이동. 클라이언트 코드를 관리하는 디렉토리를 만들고 이동합니다. 클라이언트 환경 만들기 이것으로 히...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.