T086ѧϰ�� | վ��ѧԺ | �����ĵ� | ���� | Ъ���� | IP��ַ��ѯ | �������� | ���ջ��� | �����ֵ� | ���ù��� | ������Ϣ��ѯ

��һ���룺PHP����ʵ��

�� ���ߣ���һ���� ����ʱ�䣺2010-12-31 | ���壺�� �� С��
[����]�������磬���ڶ�������ƪ���¡� ��Ȼ���ֽС�PHP����ʵ��������������Ҫ̸�IJ��DZ��̹��򣬶���PHPӦ�ó����ĺ����ܹ��� ���ṩ��һ���߼������ݷ����ļܹ�ģʽ������MVCģʽ��һ��ʵ�����Ҿ��ã����Ǻ��вο���ֵ��...

�������磬���ڶ�������ƪ���¡�

��Ȼ���ֽ���PHP����ʵ��������������Ҫ̸�IJ��DZ��̹��򣬶���PHPӦ�ó����ĺ����ܹ���

���ṩ��һ���߼������ݷ����ļܹ�ģʽ������MVCģʽ��һ��ʵ�����Ҿ��ã����Ǻ��вο���ֵ��ѧϰ���ϣ����Ƶ��������ϲ����࣬����һ��ѧϰ��һ�߾Ͱ��������˳�����

�����Լ������⣬���ܽ�������MVCģʽ��ʵ�ַ�ʽ����ϸ���ͼ����ģ���

����* ��ͼ�㣨View����ǰ����ҳ��

����* �߼��㣨Controller��������ҳ�߼���Page Controller������������ҳ��������Ȼ�󣬵���ҵ���߼���Business Controller����ʵ�־��幦�ܣ�

����* ���ݲ㣨Model�������ݱ��������ݿ�֮�У�������һ�����ݿ������㣬����������һ��"���ݷ��ʶ���"��DAO����������"ֵ����"��Value Object����ҵ���߼�ͨ��DAO������ֵ������

=======================================

PHP����ʵ��

ԭ�أ�http://www.odi.ch/prog/design/php/guide.php

���ߣ���һ��


���ĸ�����PHP�������Ƴ��������Ľ���������ͬʱ����������PHPӦ�ó����ļܹ���

1. php.ini����

php.ini�����˽���������Ϊ��������һЩ���ñ�֤�����ij����������Ŀ���ֲ�ԡ�

i. short_open_tag

��Ϊ0������Զʹ��PHP�ij���ǩ��ʽ��<?php echo "hello world"; ?>�����ö̱�ǩ��ʽ<?= "hello world" ?>��

ii. asp_tags

��Ϊ0����ʹ��ASP��ǩ<% echo "hello world"; %>��

iii. magic_quotes_gpc

�����ڽű��а���һ��ȫ���ļ��������ڶ�ȡ$_GET��$_POST��$_COOKIE����֮ǰ�����ȼ������������Ƿ��򿪣����������ˣ�������Щ����Ӧ��stripslashes��������ע���������Ѿ���PHP 5.3�б��ϳ�����

iv. register_globals

��Ҫ�����������ã���Զͨ��ȫ�ֱ���$_GET��$_POST��$_COOKIEȥ��ȡGET��POST��COOKIE��ֵ��Ϊ�˷�����������������$PHP_SELF = $_SERVER['PHP_SELF']��

v. file_uploads

�ϴ��ļ���������С�������������þ�����

����* file_uploads������Ϊ1��Ĭ��ֵ������ʾ�����ϴ���

����* memory_limit�����Դ���post_max_size��upload_max_filesize��

����* post_max_size��upload_max_filesizeҪ�㹻�����������ϴ�����Ҫ��

2. �������configuration file��

��Ӧ�ð���Ӧ�ó������ص��������ã�д��һ���ļ�����������ܷܺ�������Ӧ���������ı仯�������ļ�ͨ������������Ϣ�����ݿ�������email��ַ������ѡ�debug��logging�������ء�Ӧ�ó���������

3. ���ƿռ䣨namespace��

ѡ�����ͺ�������ʱ�򣬱�����С�ģ��������������������ܲ�Ҫ�������⣬����ȫ���Ժ����������ڲ������Ժͷ������൱����һ�����ƿռ䱣����������ȷʵ�б�Ҫ����ȫ���Ժ�������ôʹ��һ��ǰ׺������dao_factory()�� db_getConnection()��text_parseDate()�ȵȡ�

4. ���ݿ�������

PHP���ṩ���ݿ�������ͨ�ú�����ÿ�����ݿⶼ��һ���Լ��ĺ������㲻Ӧ��ֱ��ʹ����Щ����������һ�������������ݿ⣨������MySQL תΪOracle���������д��鷳�ˡ����ң����ݿ�������ͨ����ϵͳ���������ݿ⺯����������һЩ��

5. "ֵ����"��Value Object, VO��

ֵ������VO������ʽ�ϣ�����C���Ե�struct�ṹ������һ��ֻ�������ԡ��������κη�������ֻ�������ٷ��������ࡣһ��ֵ���󣬾Ͷ�Ӧһ��ʵ�塣�������ԣ�ͨ��Ӧ�������ݿ����ֶ���������ͬ�����⣬��Ӧ����һ��ID���ԡ�

����class Person {

��������var $id, $first_name, $last_name, $email;

����}

6. ���ݷ��ʶ�����Data Access Object, DAO��

���ݷ��ʶ�����DAO�������ã���Ҫ�ǽ����ݿ��������������������롣DAOӦ���ǿ��Ե��ӣ�stacked���ģ������������ڽ��������������ݿ⻺�档ÿһ��ֵ�������࣬��Ӧ�����Լ���DAO��

����class PersonDAO {
��������var $conn;

��������function PersonDAO(&$conn) {
������������$this->conn =& $conn;
��������}

��������function save(&$vo) {
������������if ($v->id == 0) {
����������������$this->insert($vo);
������������} else {
����������������$this->update($vo);
������������}
��������}


��������function get($id) {
������������#execute select statement
������������#create new vo and call getFromResult
������������#return vo
��������}

��������function delete(&$vo) {
������������#execute delete statement
������������#set id on vo to 0
��������}

��������#-- private functions

��������function getFromResult(&vo, $result) {
������������#fill vo from the database result set
��������}

��������function update(&$vo) {
������������#execute update statement here
��������}

��������function insert(&$vo) {
������������#generate id (from Oracle sequence or automatically)
������������#insert record into db
������������#set id on vo
��������}
����}

DAOͨ��Ӧ�ò������·�����

����* save������������һ����¼
����* get��ȡ��һ����¼
����* delete��ɾ��һ����¼

�����Ը����Լ�����Ҫ����������DAO������������������isUsed()��getTop($n)��find($criteria)��

���ǣ����е�DAO������Ӧ�������ݿ������йأ���Ӧ��ִ������������DAOֻӦ�ö�һ�ű����л�����select / insert / update����Ӧ�ð���ҵ���߼���������˵��PersonDAO�Ͳ�Ӧ�ð�����ij�˷���Email�Ĵ��롣

������дһ���������������ݲ�ͬ��������������Ӧ��DAO��

����function dao_getDAO($vo_class) {

��������$conn = db_conn('default'); #get a connection from the pool

��������switch ($vo_class) {

������������case "person": return new PersonDAO($conn);

������������case "newsletter": return new NewsletterDAO($conn);

������������...

��������}

����}
 

7. �Զ����ɴ���

99%��ֵ������DAO���룬���Ը������ݿ�ģʽ��schema���Զ����ɣ�ǰ�������ı�����ʹ��Լ���ķ�ʽ�����������������޸����ݿ�ģʽ��һ���Զ����ɴ����Ľű���������ʡ����ʱ�䡣

8. ҵ���߼�

ҵ���߼�ֱ�ӷ�ӳʹ���ߵ���Ҫ�����Ǵ���ֵ���󣬸���ҵ����Ҫ�޸�ֵ���������ԣ�ʹ��DAO�����ݿ��㽻����

����class NewsletterLogic {
��������function NewsletterLogic() {
������������...
��������}

��������function subscribePerson(&$person) {
������������...
��������}

��������function unsubscribePerson(&$person) {
������������...
��������}

��������function sendNewsletter(&$newsletter) {
������������...
��������}
����}
 

9. ҳ�߼�����������

��һ����ҳ������ʱ��ҳ��������page controller���ͻ����У�Ȼ�����������������������񣬾��ǽ�HTTP����ת����ҵ��������business object����Ȼ��������Ӧ��ҵ���߼�����������һ��"չʾ����"�Ķ�����

ҳ�߼�����ִ�����²��裨�����պ�����PageController���Ĵ��룩��

����i. �ٶ�ҳ������֮�У�����һ��cmd������

����ii. ����cmd������ֵ��ִ����Ӧ�Ķ�����

����iii. ��֤ҳ�淵�ص�ֵ������һ��ֵ������

����iv. ����ֵ������ִ��ҵ���߼���

����v. �����б�Ҫ�����Ե�����һ��ҳ�档

����vi. �ռ���Ҫ�����ݣ�����������

ע�⣺���Ա�дһ�����ߺ�����utility function��������GET��POSTֵ�����еı���û�и�ֵʱ���ṩһ��Ĭ��ֵ��ҳ�߼�������HTML���롣

����class PageController {
��������var $person; #$person is used by the HTML page
��������var $errs;

��������function PageController() {
������������$action = Form::getParameter('cmd');
������������$this->person = new Person();
������������$this->errs = array();

������������if ($action == 'save') {
����������������$this->parseForm();
����������������if (!this->validate()) return;

����������������NewsletterLogic::subscribe($this->person);

����������������header('Location: confirmation.php');
����������������exit;
������������}
��������}


��������function parseForm() {
������������$this->person->name = Form::getParameter('name');
������������$this->person->birthdate = Util::parseDate(Form::getParameter('birthdate');
������������...
��������}

��������function validate() {
������������if ($this->person->name == '') $this->errs['name'] = FORM_MISSING;
������������#FORM_MISSING is a constant
������������...
������������return (sizeof($this->errs) == 0);
��������}
����}

10. ���ֲ㣨Presentation Layer��

�����ҳ������ʵ�ʵ�HTML���롣����ҳ����Ҫ������ҵ��������business object������ҳ�߼��ṩ��

����ҳ���ȶ�ȡҵ�����������ԣ�Ȼ��������ת����HTML��ʽ��

����<?php
��������require_once('control/ctl_person.inc.php'); #the page controller
��������$c =& new PageController();
����?>

����<html>
����<body>
����<form action="<?php echo htmlspecialchars($PHP_SELF) ?>" method="POST">
��������<input type="hidden" name="cmd" value="save">
��������<input type="text" name="name"
value="<?php echo htmlspecialchars($c->person->name); ?>">
��������<button type="submit">Subscribe</button>
����</form>
����</body>
����</html>

11. ���ػ���Localization��

���ػ���ζ��Ҫ֧�ֶ������ԣ������Ƚ��鷳�����޷������ַ�������ѡ����

����A) ׼������ҳ�档

����B) HTMLҳ����ȥ���ض��������ص����ݡ�

һ����˵��A�����õñȽ϶࣬��ΪB������ʹ��HTMLҳ���Ŀɶ��Ժܲ

���ԣ���������д��һ�����Ե�ҳ�棬Ȼ�������ǽ��п�������ij��������������ͬ���Եİ汾������index_fr.php��ʾindex.php�ķ����档

Ϊ�˱����û�������ѡ�������м��ַ�����

����A) �������趨������һ��session������cookie֮�У�

����B) ��HTTPͷ�ж�ȡlocaleֵ��

����C) �������趨��Ϊһ��������׷����ÿ��URL���档

����ȥA������C�������׵öࣨ��Ȼsession��cookie���й��ڵ����⣩����B����ֻ����ΪA��C�IJ��䡣

������Ҫ���ˣ����ݿ��е��ֶ�Ҳ�������б��ػ���

12. ��װλ��

��ʱ������Ҫ֪�������ĸ�Ŀ¼���������$_SERVER['DOCUMENT_ROOT']ֻ��web�������ĸ�Ŀ¼���������ij�����װ������ij����Ŀ¼֮�У�PHPû���Զ�֪����

�����Զ���һ��ȫ�ֱ���$ROOT������ֵ���dz����ĸ�Ŀ¼��Ȼ������������ÿһ���ű��ļ��С���ô����Ҫ����ij���ļ���������дrequire_once("$ROOT/lib/base.inc.php");��

13. Ŀ¼�ṹ

���ȣ�ÿ���඼Ӧ�����Լ��Ķ����ļ�����������һ���ļ���������������naming convention����

������Ŀ¼�ṹ���Բ���������ʽ��

����/ ��Ŀ¼��������������ҳ�濪ʼ���ʡ�

����/lib/ ����ȫ�ֱ�����base.inc.php���������ļ���config.inc.php����

����/lib/common/ ����������ĿҲ���Թ��õĿ⣬�������ݿ������㡣

����/lib/model/ ����ֵ�����ࡣ

����/lib/dao/ �������ݷ��ʶ�����DAO���࣬�Լ�DAO����������

����/lib/logic/ ����ҵ���߼��ࡣ

����/parts/ ����HTML����

����/control/ ����ҳ�߼������ڴ��ͳ�����˵������Ŀ¼�������ܻ�����Ŀ¼������admin/, /pub/����

base.inc.php�ļ��У�Ӧ�ð�������˳�����Ӱ����ļ���

����* /lib/common֮�о���ʹ�õ��ࣨ�������ݿ��㣩��

����* �������

����* /lib/model֮�������ࣻ

����* /lib/dao��֮�������ࡣ

������Щ����ͼƬ���ϴ��ļ���Ŀ¼��������ʡ���ˡ�

���꣩

ԭ�ģ�http://www.ruanyifeng.com/blog/2010/12/php_best_practices.html

  • ת����ע����Դ��ITѧϰ�� ��ַ��http://www.t086.com/ �����������Ƽ�������
  • �ر������� ��վ�������ر�������ֹת�ص�ר�������������¿�������ת�أ���������ע��������ԭʼ���ߡ����°�Ȩ������ԭʼ�������С����ڱ���վת�����µĸ��˺���վ�����DZ�ʾ������л�⡣������վת�ص������а�Ȩ��������ϵ���ǣ����ǻᾡ�����Ը�����
������ѯ Health Check Gulangyu
© 2017 T086ѧϰ�� - T086.com(ԭitlearner.com)
RunTime:6.40ms QueryTime:7