��һ���룺PHP����ʵ��
�������磬���ڶ�������ƪ���¡�
��Ȼ���ֽ���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�ʾ������л�⡣������վת�ص������а�Ȩ��������ϵ���ǣ����ǻᾡ�����Ը�����
- ������������������̸�����ɶ��ر�
- ��������������ѡʳƷ����2020�ļ��ȵ�Ͷ�ʲ��Ժ���������
- �����ڵ�����֤50���ƴ�50����ָ֤�������Ĺ���
- ����֤50����Щ��Ʊ_��֤50Ȩ����������
- ������300����֤50����֤500��ָ��2019���ڶ��ζ��ڵ���������
- ������300��ֵ/�ɳ�ָ�����Ʒ����������й�ƽ��Ȩ���½�
- ����ָ֤��������֤50��ָ��������
- ����ָ֤��������֤����ָ��������
- ����ָ֤��������֤100ָ��������
- ����ָ֤����������300ָ��������