PHP5学习笔记

 更新时间:2016年11月25日 15:16  点击:2054

PHP5学习笔记
第一节--面向对象编程
面向对象编程被设计来为大型软件项目提供解决方案,尤其是多人合作的项目. 当源代码增长到一万行甚至更多的时候,每一个更动都可能导致不希望的副作用. 这种情况发生于模块间结成秘密联盟的时候,就像第一次世界大战前的欧洲.
//haohappy注:喻指模块间的关联度过高,相互依靠性太强.更动一个模块导致其它模块也必须跟着更动.
想像一下,假如有一个用来处理登录的模块答应一个信用卡处理模块来分享它的数据库连接. 当然出发点是好的,节省了进行另一个数据库连接的支出.然而有时,登录处理模块改变了其中一个变量的名字,就可能割断了两者间的协议.导致信用卡模块的处理出错,进而导致处理的模块出错. 很快地,体系中所有无关的模块都可能由此出错.
因此,我觉得有点戏剧性地,绝大多数程序员都对耦合和封装心存感激. 耦合是两个模块间依靠程度的量度. 耦合越少越好.我们希望能够从已有的项目中抽走一个模块并在另一个新项目中使用.
我们也希望在某个模块内部大规模的更动而不用担心对其他模块的影响. 封装的原则可以提供这个解决方案.模块被看待成相对独立,并且模块间的数据通信通过接口来进行. 模块不通过彼此的变量名来窥探另一个模块,它们通过函数来礼貌地发送请求.
封装是你可以在任何编程语言中使用的一个原则. 在PHP和许多面向过程的语言中,可以偷懒是很有诱惑的.没有什么可以阻止你通过模块来构建一个假想的WEB. 面向对象编程是使程序员不会违反封装原则的一种方法.
在面向对象编程中,模块被组织成一个个对象. 这些对象拥有方法和属性. 从抽象的角度来看,方法是一个对象的所做的动作,而属性是对象的特性.从编程角度来看,方法就是函数而属性是变量. 在一个理想化的面向对象体系中,每个部份都是一个对象. 体系由对象及对象间通过方法来形成的联系构成.
一个类定义了对象的属性. 假如你在烘烤一组甜饼对象,那么类将会是甜饼机. 类的属性和方法是被调用的成员. 人们可以通过说出数据成员或者方法成员来表达.
每种语言提供了不同的途径来访问对象. PHP从C 中借用概念,提供一个数据类型用来在一个标识符下包含函数和变量。最初设计PHP的时候,甚至PHP3被开发出时,PHP并不打算提供开发超过10万行代码的大型项目的能力。随着PHP和Zend引擎的发展,开发大型项目变得有可能,但无论你的项目规模多大,用类来书写你的脚本将可以让代码实现重用。这是一个好主意,非凡当你愿意与别人分享你的代码的时候。
有关对象的想法是计算机科学上最令人兴奋的概念之一。开始很难把握它,但我可以保证,一旦你把握了它,用它的思维来思考将会非常自然。
第二节--PHP5 的对象模型
PHP5 有一个单重继续的,限制访问的,可以重载的对象模型. 本章稍后会具体讨论的”继续”,包含类间的父-子关系. 另外,PHP支持对属性和方法的限制性访问. 你可以声明成员为private,不答应外部类访问. 最后,PHP答应一个子类从它的父类中重载成员.
//haohappy注:PHP4中没有private,只有public.private对于更好地实现封装很有好处.
PHP5的对象模型把对象看成与任何其它数据类型不同,通过引用来传递. PHP不要求你通过引用(reference)显性传递和返回对象. 在本章的最后将会具体阐述基于句柄的对象模型. 它是PHP5中最重要的新特性.
有了更直接的对象模型,基于句柄的体系有附加的优势: 效率提高, 占用内存少,并且具有更大的灵活性.
在PHP 的前几个版本中,脚本默认复制对象.现在PHP5只移动句柄,需要更少的时间. 脚本执行效率的提升是由于避免了不必要的复制. 在对象体系带来复杂性的同时,也带来了执行效率上的收益. 同时,减少复制意味着占用更少的内存,可以留出更多内存给其它操作,这也使效率提高.
//haohappy注:基于句柄,就是说两个对象可以指向同一块内存,既减少了复制动作,又减少对内存的占用.
Zand引擎2具有更大的灵活性. 一个令人兴奋的发展是答应析构--在对象销毁之前执行一个类方法. 这对于利用内存也很有好处,让PHP清楚地知道什么时候没有对象的引用,把空出的内存分配到其它用途.
第三节--定义一个类
当你声明一个类,你需要列出对象应有的所有变量和所有函数

1. 当您在寻找关于某个具体的 PHP 函数的信息时,请转至 http://php.net/ 。例如:http://php.net/join。这将直接把您带到您地理位置四周的一台服务器上的联机手册中的正确位置上。

  2. 试试这个:pear install apc 。pear 命令是一个有用的安装程序,它甚至可以用来安装用 C 编写的 PHP 扩展。在这种情况下,它将安装 APC opcode 高速缓存扩展。

  3. 使用 opcode 高速缓存来提高性能。

  4. 在 PHP 中混合 OOP 和过程代码不存在任何错误。在对象有意义的时候使用对象,其余情况转用过程。

  5. 用您自己定制的 C 或 C 扩展来扩展 PHP 比您想象的要更轻易。参见 PHP 源代码版本中的 README.EXT_SKEL。

  6. echo <<<EOB 语法对于用完整的 $variable 替换来输出文本块非常有用,并且无需避开任何东西。EOB;

  7. PATH_INFO 很棒!用它来清除难看的 URL。

  8. 使用一个记录程序,pear install apd。

  9. 数据库抽象大部分是虚构的故事。直接的数据库调用没什么错,它利用您选择的数据库必须提供的所有技巧和窍门,以从中获得尽可能高的性能。

  10. 保持使用您的基础技术,并构建简单的程序块。使用无线程的 Web 服务器,避免复杂的框架和抽象层,从而给您自己机会来跟踪和调试可能出现的任何问题。解决 Web 问题很简单;别试图使它变得困难。

十天学会php之第一天

  以 Apache web server 和 MY SQL 作为WEB服务器和数据库在php-4.3.3下的环境做程序简单的构建和访问查看数据库用 PHPMYADMIN。

  PHP的语法:

  1、嵌入方法:

  PHP可以是以<?php或者是<?为开始符号,结束符号是?>,当然也可以自己指定。

  2、引用文件:

  引用文件的方法有两种:require 及 include。

  require 的使用方法如 require("MyRequireFile.php"); 。这个函数通常放在 PHP 程序的最前面,PHP 程序在执行前,就会先读入 require 所指定引入的文件,使它变成 PHP 程序网页的一部份。常用的函数,亦可以这个方法将它引入网页中。

  include 使用方法如 include("MyIncludeFile.php"); 。这个函数一般是放在流程控制的处理部分中。PHP 程序网页在读到 include 的文件时,才将它读进来。这种方式,可以把程序执行时的流程简单化。

  3、注释方法:

<?php
echo "这是第一种例子。n" ; // 本例是 C 语法的注释
/* 本例采用多行的
注释方式 */
echo "这是第二种例子。n" ;
echo "这是第三种例子。n" ; # 本例使用 UNIX Shell 语法注释
?>

  4、变量类型:

$mystring = "我是字符串" ;
$NewLine = "换行了n" ;
$int1 = 38 ;
$float1 = 1.732 ;
$float2 = 1.4E 2 ;
$MyArray1 = array( "子" , "丑" , "寅" , "卯" );

这里引出两个问题:第一PHP变量以"$"开头,第二PHP语句以";"结尾。这两个遗漏也是程序上大多错误所在。

  5、运算符号:

数学运算:

符号 意义
加法运算
- 减法运算
* 乘法运算
/ 除法运算
% 取余数
累加
-- 递减

  字符串运算:

  运算符号只有一个,就是英文的句号"."。它可以将字符串连接起来,变成合并的新字符串。

<?
$a = "PHP 4" ;
$b = "功能强大" ;
echo $a.$b;
?>

  这里也引出两个问题,首先PHP中输出语句是echo,第二类似ASP中的<%=变量%>,PHP中也可以<?=变量?>。

逻辑运算:
符号 意义
< 小于
> 大于
<= 小于或等于
>= 大于或等于
== 等于
!= 不等于

<?php
/**
* Sort an two-dimension array by some level two items use array_multisort() function.
*
* sysSortArray($Array,"Key1","SORT_ASC","SORT_RETULAR","Key2"……)
* @param array $ArrayData the array to sort.
* @param string $KeyName1 the first item to sort by.
* @param string $SortOrder1 the order to sort by("SORT_ASC"|"SORT_DESC")
* @param string $SortType1 the sort type("SORT_REGULAR"|"SORT_NUMERIC"|"SORT_STRING")
* @return array sorted array.
*/
function sysSortArray($ArrayData,$KeyName1,$SortOrder1 = "SORT_ASC",$SortType1 = "SORT_REGULAR")
{
if(!is_array($ArrayData))
{
return $ArrayData;
}

// Get args number.
$ArgCount = func_num_args();

// Get keys to sort by and put them to SortRule array.
for($I = 1;$I < $ArgCount;$I )
{
$Arg = func_get_arg($I);
if(!eregi("SORT",$Arg))
{
$KeyNameList[] = $Arg;
$SortRule[] = '$'.$Arg;
}
else
{
$SortRule[] = $Arg;
}
}

// Get the values according to the keys and put them to array.
foreach($ArrayData AS $Key => $Info)
{
foreach($KeyNameList AS $KeyName)
{
${$KeyName}[$Key] = $Info[$KeyName];
}
}

// Create the eval string and eval it.
$EvalString = 'array_multisort('.join(",",$SortRule).',$ArrayData);';
eval ($EvalString);
return $ArrayData;
}

全球超过300万个互联网网站的治理员都在使用PHP,使得它成为最为普及的服务器端脚本语言之一。其特点是运行速度快、稳定可靠、跨平台,而且是开放源代码软件。随你使用的水平不同,PHP可以很简单,也可以很复杂,可以只使用它发送HTML表格元素,还可以在PHP应用程序中集成Java和XML。

假如你对PHP有一定的了解或者看过一些初步的教材,这些技巧可以扩展你对PHP的熟悉,使你把握一些常见的和高级的PHP功能。

  一、把PHP安装为Apache的DSO

PHP在Linux/Unix平台上经常与Apache搭配使用,在安装PHP时,有三种安装方式可供选择:静态模式、动态模式(DSO)、CGI二进制模式。

  由于易于维护和升级,我强烈建议以DSO方式安装PHP。例如,初次安装时假如安装的PHP仅支持数据库,随后希望再安装支持加密的模块,只要运行 “make clean”,添加新的配置选项,然后再运行“make”和“make install”即可,一个新的PHP模块就会安装在Apache中适当的位置上,然后重新启动Apache,而无需重新编译Apache。

下面的步骤将安装一个全新的Apache,并以DSO方式安装PHP:

1、从Apache软件基金会得到最新版本的Apache源代码;

2、把得到的源代码放到/usr/local/或者/opt/目录下,或者你指定的任意目录中;

3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;

4、运行下面的命令,把文件安装到apache_[version]目录中:

tar -xvf apache_[version].tar

5、进入/usr/local/apache_[version]目录(或者在步骤4中安装压缩文件的目录);

6、键入下面的命令为编译Apache作预备,用你自己的路径替换其中的[path],例如,/usr/local/apache[version],现在已经设置了mod_so的新值,它将答应Apache使用DSO模块;

7、回到提示符状态后键入make,并等待再次回到提示符状态;

8、执行“make install”命令。

至此,Apache已经安装完毕,系统将重回到提示符状态。接下来我们开始安装PHP:

1、在PHP主页的下载区中找到最新版本的链接;

2、把文件下载到一个适当的目录中,例如/usr/local/或/opt/或者你指定的任意目录中;

3、运行Gunzip对文件进行解压缩,得到后缀为.tar的文件;

4、执行下面的命令把文件安装在php-[version]目录中:

tar -xvf php-[version]

5、进入/usr/local/php-[version]目录或在步骤4中指定的目录;

至此,已经作好了以DSO方式安装PHP的预备工作,唯一需要修改的配置选项是with-apxs(这是Apache的bin目录中的一个文件)。为了得到较高的性能,我没有安装对MySQL的支持模块。

./configure --with-mysql=/[path to mysql] --with-apxs=/[path to apxs]

6、回到提示符状态后执行make命令,等待重新返回到提示符状态;

7、执行make install命令。

至此,系统以DSO方式在Apache的模块目录中安装了PHP,并对Apache的httpd.conf文件作适当的修改后返回到提示符状态。回到提示符状态后,你还需要对Apache的httpd.conf文件作一些修改。

1、找到包含有ServerAdmin的一行,添加你的电子邮件地址,如下所示:

ServerAdmin you@yourdomain.com

2、找到以ServerName开头的行,把它改为真正的值,例如:

ServerName localhost

3、找到内容如下所示的小节:

# And for PHP 4.x, use:

#

#AddType application/x-httpd-php .php

#AddType application/x-httpd-php-source .phps

修改这些行的内容,使PHP 4.0的AddType不再成为注释,并添加希望在PHP中使用的文件后缀名,上面的内容变为如下所示的内容

[!--infotagslink--]

相关文章

  • PyTorch一小时掌握之迁移学习篇

    这篇文章主要介绍了PyTorch一小时掌握之迁移学习篇,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-09-08
  • php上传图片学习笔记与心得

    我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
  • Smarty模板学习笔记之Smarty简介

    1、简介Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一。它分离了逻辑代码和外在的内容,提供了一种易于管理和使用的方法,用来将原本与HTML代码混杂在一起PHP代码逻辑分离。简单的讲,目...2014-05-31
  • php Observer观察者模式之学习笔记

    当我们在星际中开地图和几家电脑作战的时候,电脑的几个玩家相当于结盟,一旦我们出兵进攻某一家电脑,其余的电脑会出兵救援。 那么如何让各家电脑知道自己的盟友被攻击了...2016-11-25
  • PHP 日期函数 学习笔记介绍

    举一个简单的date例子 我将使用echo命令把内容输出到我们的客户端(浏览器)。我将使用下面的代码做为基础代码。 代码如下 复制代码 <!DOCTY...2016-11-25
  • 学习 Vue.js 遇到的那些坑

    这篇文章主要介绍了学习 Vue.js 遇到的那些坑,帮助大家更好的理解和使用vue框架,感兴趣的朋友可以了解下...2021-02-04
  • 开启BootStrap学习之旅

    当下最流行的前端开发框架Bootstrap,可大大简化网站开发过程,从而深受广大开发者的喜欢,你如果也喜欢Bootstrap前端开发框架,不要错过这次旅行...2016-05-05
  • 值得分享和收藏的Bootstrap学习教程

    这绝对是一套值得分享和大家收藏的Bootstrap学习教程,完整的知识体系,系统的学习资料,帮助大家开启Bootstrap学习之旅,享受Bootstrap带给大家的奇妙乐趣...2016-05-14
  • AI:如何训练机器学习的模型

    这篇文章主要介绍了是如何进行机器学习的模型的训练,全文逻辑清晰,简单易懂,如果您正在学习机器学习那么可以参考下,说不定会有不一样的收货...2021-04-16
  • Android学习笔记之多界面切换实例

    一篇Android学习笔记之多界面切换实例,希望对各位朋友有所帮助。 用过VB 、 VC#的朋友都知道,在VB或VC#里要进行窗口(界面)切换很容易 例如在VB、C#里: 有 Fom1、...2016-09-20
  • php中的变量引用传值学习笔记

    引用:意思是将原始对象在内存中的地址传递给目标对象,就相当于原始对象和目标对象指向的是同一个内存地址。此时,如果对目标对象或者原始对象进行修改,内存中的数据也会改...2016-11-25
  • PHP中的cURL请求及示例学习笔记

    cURL是php中一个很强大的功能,可以模仿各种用户请求,如模仿用户登录,发送php cookie等等操作,下面我来整理一些相关的方法与各位同学看看 备注:使用curl_init函数,必须...2016-11-25
  • 那些年,我还在学习C# 学习笔记

    那些年学了ASP.NET后,才开始学习C#,说来也怪,怎么学了ASP.NET才来学习C#,其实没有什么的...2020-06-25
  • YII2 WIDGET的学习笔记

    CWidget是所有Widget的基类。CWidget是自包含组件,可以看出是MVC的简略版,CWidget相比Controller,既没有actions,也没有filters widget,英文意思为小工具,小挂件,在程序...2016-11-25
  • metasploit调用nexpose扫描学习笔记

    Metasploit是一个免费的、可下载的框架,通过它可以很容易地获取、开发并对计算机软件漏洞实施攻击。它本身附带数百个已知软件漏洞的专业级漏洞攻击工具 nexpose安...2016-11-25
  • php学习笔记之PHP扩展开发教程

    PHP扩展开发不是所有开发者都会操作的一个东西,下面我来演示一个关于PHP扩展开发实现过程,各位同学有需要可进入参考。 我们先假设需要这样一个扩展,提供一个叫tao_s...2016-11-25
  • Yii2学习笔记之汉化yii设置表单的描述

    小编推荐的这篇文章介绍了Yii2学习笔记之汉化yii设置表单的描述,非常实用,有兴趣的同学快来看看吧。 一:汉化框架&#8195;&#8195;框架汉化在这里设置,如果不生效,前台后...2017-07-06
  • php Builder建造器模式学习笔记

    星际里面有不少的任务关,也可以自己编辑地图,画面上有各种地形,建筑和部队,存在一个问题,初始化画面的流程很乱。待解决的问题:完成初始化画面的工作,同时尽量减少各种绘制...2016-11-25
  • php中session学习笔记

    Session指的就是用户在浏览某个网站时,从进入网站到浏览器关闭所经过的这段时间,也就是用户浏览这个网站所花费的时间。从上述的定义中我们可以看到,Session实际上是一个...2016-11-25
  • 学习使用PHP数组

    PHP4.0中共有超过30个新的数组相关函数。其中很多通用函数答应你检查给定数组中是否存在特定对象、对数组元素计数、增加或删除元素,或对元素排序。 假如你有很大的...2016-11-25