PHP学习笔记5:代码重用和函数

读《PHP和MySQL Web开发》笔记合集:

http://my.oschina.net/bluefly/blog/478580

1、
代码重用的好处

成本、可靠性、一致性

注意:只要原来的代码是模块化的而且编写良好,那么重复使用代码还会节省很多工作。在工作时,可以试着辨认一下今后可能再次要调用的代码段。

2、
require() 与被包含代码执行问题

如果希望一个被包含文件中的PHP代码能够被当成PH代码进行处理,必须将PHP代码放到PHP标记之间(不管被包含代码的文件是什么后缀,jpg、rar后缀都无所谓,只要里边的php代码是放在php标签里的,被包含后都能执行)

但是文件后缀,会影响浏览器访问该文件时是否直接载入,并以普通文本的形式查看源代码。

所以,
为了安全,请将被包含文件保存在文档树之外,或者使用标准的文件扩展名

例子:

3、如果
被包含文件不存在的话, require会给一个致命错误,而include 只会给一个警告

还有两个变体,
require_once() ,include_once() 确保一个被包含的文件,只能被引入一次。

注意:当引入函数库时,这两个函数才非常有用,使用这两个函数可以防止错误的引入同样的函数库两次,从而出现重复定义的错误。如果关心编码实践,可以考虑使用require() 和include() ,因为它们的运行速度较快。

通过require()  调用外部文件的时候,文件的名称并不会影响对它们的处理

4、即使php后缀的,文件,如果写HTML代码,直接访问,还是当做html被解析处理的

注意:
如果
希望保证一个文件被当做纯文本或HTML,而且不会执行任何PHP
,可以使用
 readfile() 
作为替代方法。这个函数将回显文件内容,不会对其进行解析。如果使用的是用户提供的文本,这可能就是一个重要的安全问题。

5、一个好的静态页面模板

例子:

<html>

<head>

<style>

...

</style>

</head>

<body>

<!-- page header -->

...

<!-- menu -->

...

<!-- page content-->

....

<!-- page footer-->

...

</body>

</html>

6、希望将页眉和脚注加入到每个页面中

1)配置
php.ini

auto_prepend_file

auto_append_file

windows例子如下

auto_prepend_file = “c:/Program Files/Apache Software Froundation/Apache2.2/include/header.php”

auto_append_file = “c:/Program Files/Apache Froup/Apache2/include/footer.php”

UNIX例子如下:

auto_prepend_file = “/home/username/include/header.php”

auto_append_file
 = “/home/username/include/footer.php”

注意:如果使用了这些指令,就不需要再输入include() 语句,但页眉和页脚在页面中不再是页面的可选内容了

2)Apache Web下,
每个目录配置
.htaccess

这个文件需要包含如下两行代码:

php_value auto_prepend_file = “/home/username/include/header.php”

php_value
 auto_append_file
 = “/home/username/include/footer.php”

注意:其语法与php.ini中有所不同,没有等号,但很多php.ini中的设定也可以按照这种方法修改。

注意:在.htaccess 中设置选项,有极大的灵活性。可以在一台只影响你的目录的共享主机上进行,不需要重启服务器,也不需要管理员全下。

缺点是,使用.htaccess 的目录中每个被读取和被解析的文件每次都要进行处理,而不是只在启用时处理一次。

7、函数中可选参数的问题

首先注意,PHP里函数名不区分大小写,变量名区分,而JavaScript是都区分。


比如一个函数原型:

resource fopen( string 
filename, string 
mode [, bool 
use_include_path [, resource 
content]] )

详细解释:

"resource" 告诉我们该函数会返回一个资源,fopen()函数中,函数原型中共给出了4个参数。[] 刚括号指明了这个参数是可选的,可以忽略它们,如果忽略它们,它们会使用默认只。

请注意:一个具有多个可选值的函数,必须给可选参数从左到右赋值。比如,可以不给出 content 参数,或者可以不提供use_include_path 和 content 参数,但是不能不提供use_include_path ,而只给出content参数。

测试:

例子2:注意了哈,还有一个说法是,说php只传递值。

16依次赋给了第3个参数c。

8、调用未定义的函数

Fatal error: Call to undefined function tests1() in D:\wamp\www\study\fuc.php on line 10

注意:通常PHP给出的错误信息是非常有用的,它告诉我们错误出现在哪个文件中,哪一行,以及我们调用的函数名称。

如果看到这个信息,有3个可能

1)函数名称的拼写是否正确;

2)这个函数是否存在于所有的PHP版本中;

3)所调用的函数是否是PHP扩展的一部分,而该部分并没有被载入。

9、函数的基本结构

1)函数命名有如下几个限制

函数名称不能喝已有函数重名(许多语言允许重复使用函数名称,叫“重载”,PHP不支持函数重载);

函数名称只能包含字母、数字和下划线且不能以数字开始。

注意:

$name 并不是一个函数的合法名称,但类似于$name(); 的函数调用,也可以正确地执行
,这是根据$name 的值来确定的。PHP可以取出保存在$name 中的值,寻找具有那个名称的函数,并且调用该函数。这种函数类型被称为
可变函数,而且有时候是有用的。

2)在{} 花括号中,可以包含在PHP 脚本的其他地方都合法的代码,其中包括函数调用、新的变量或函数声明、require()或include() 语句类声明以及HTML代码。

如果希望在一个函数中退出PHP 并输入 HTML脚本,可以像在脚本其他地方做的那样,使用一个风的PHP标记,然后再编写HTML。例子:

<?php

 function my_function() {

?>

My function was called

<?php

 }

?>

10、
3个帮助器函数,确定传递进来的参数情况

func_num_args():返回传入的参数个数

func_get_arg():一次获得一个参数

func_get_args():返回参数的数组

11、理解作用域

1)函数内局部变量和函数外全局变量,可以变量名相同,不冲突,懂。

2)有所谓的“超级全局变量”

3)global 可手动指定函数中的变量具有全局作用域。

4)调用 unset($variable_name) 可以手动删除变量,如果变量被删除,它就不再参数所指定的作用域中了。

例子:

因为$var 并没有被赋值。

建议:避免函数内外使用同一个变量名。

12、参数的引用传递和值传递

值传递:

function increment(
$value, $amount = 1)

{...}

引用传递:

function increment(&
$value, $amount = 1)

{...}

引用传递,能改变原值。

13、return

当一个函数的执行结束时,要么是因为所有命令都执行完了,要么就是使用了“return”,return可以不返回值,但是建议返回。

14、递归

PHP支持递归函数,递归函数就是函数调用自己本身。这些函数特别适用于浏览动态数据结构,例如连接列表和树。

但是,几乎没有基于Web的应用程序要求使用如此负责的数据结构。在很多情况下,递归可以用来取代循环,因为二者都是重复做一些事情。递归函数比循环慢而且要占用更多内存,所以应该尽可能多用些循环。

<?php

function reverse_r($str)

{

if (strlen($str)>0)

reverse_r(substr($str, 1));

echo substr($str, 0, 1);

return;

}

function reverse_i($str)

{

for ($i=1; $i<=strlen($str); $i++)

{

echo substr($str, -$i, 1);

}

return;

}

reverse_r(‘Hello‘);

echo ‘<br />‘;

reverse_i(‘Hello‘);

?>

但是,如上边的例子,递归那段,每次调用这个函数都在服务器的内存中生成一段该函数代码的新副本,递归函数将在内存中创建几个自身的副本,而且将产生多次函数调用的开销。

虽然递归看上去更美观,但一定要给出终止条件,否则将导致服务器内存耗尽,或者达到了最大调用次数。

15、命名空间
(又叫名称空间,namespace)

通常,命名空间是一个抽象的容器,它可以包含一组标识符;

PHP中,命名空间可以包含你所定义的函数、常量和类。

从结构角度看,为自定义函数和类定义命名空间的有点:

1)一个命名空间中的所有函数、类和常量都将冠以名称空间前缀。

2)非全路径的类、函数和常量名称将在运行时解析,在查看全局空间之前,将首先查看命名空间。

时间: 2024-10-22 22:04:25

PHP学习笔记5:代码重用和函数的相关文章

初探swift语言的学习笔记四(类对象,函数)

作者:fengsh998 原文地址:http://blog.csdn.net/fengsh998/article/details/29606137 转载请注明出处 假设认为文章对你有所帮助,请通过留言或关注微信公众帐号fengsh998来支持我,谢谢! swift扩展了非常多功能和属性,有些也比較奇P.仅仅有慢慢学习,通过经验慢慢总结了. 以下将初步学习一下类的写法. 码工,最大爱好就是看码,而不是文字,太枯燥. // // computer.swift // swiftDemo // // C

Silverlight动画学习笔记(三):缓动函数

(一)定义: 缓动函数:可以将自定义算术公式应用于动画 (二)为什么要用缓动函数: 您可能希望某一对象逼真地弹回或其行为像弹簧一样.您可以使用关键帧动画甚至 From/To/By 动画来大致模拟这些效果,但可能需要执行大量的工作,并且与使用算术公式相比动画的精确性将降低. (三)实例讲解: 1 <UserControl x:Class="AnimationStudy.EasingFunctionAnimation" 2 xmlns="http://schemas.mic

PHP代码重用与函数编写

代码重用与函数编写 1.使用require()和include()函数 这两个函数的作用是将一个文件爱你载入到PHP脚本中,这样就可以直接调用这个文件中的方法.require()和include()几乎是一样的,唯一的区别就是函数失败后前者给出一个致命错误,后者给出一个警告变体:require_once()和include_once()确保一个包含的文件只能被引入一次,多用这个 2.在PHP中使用函数 2.1调用函数 如果一个函数已经被定义了,且该函数在这个脚本里面,则可以直接调用,类似调用函数

iOS: 学习笔记, 用代码驱动自动布局实例

iOS自动布局是设置iOS界面的利器. 本实例展示了如何使用自动布局语言设置水平布局, 垂直布局 1. 创建空白iOS项目 2. 添加一个控制器类, 修改YYAppDelegate.m文件 #import "YYAppDelegate.h" #import "YYViewController.h" @implementation YYAppDelegate - (BOOL)application:(UIApplication *)application didFin

iOS: 学习笔记, 用代码驱动自动布局实例(swift)

iOS自动布局是设置iOS界面的利器.本实例展示了如何使用自动布局语言设置水平布局, 垂直布局1. 创建空白iOS项目(swift)2. 添加一个控制器类, 修改YYAppDelegate.swift文件 @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(application: UIApplication, didFi

第五章 代码重用与函数编写(1)

****************************** 第五章 代码重用与函数编写 ********************************* 代码重用的好处:使用require()和include()函数:函数介绍:定义函数:使用参数:理解作用域: 返回值:参数的引用调用和值调用:实现递归:使用命名空间 *************** 5.1 代码重用的好处 1.成本低:2.可靠性:3.一致性:系统的外部接口是一致的,其中包括用户接口和系统的外部接口. *************

C++学习笔记8,const在函数方面的使用(二)

7.1和7.1.1由于越狱不成熟,半完美越狱后电脑上无法访问系统越狱目录,如var usr 等等. 今天有些意外地发现,可以在电脑上使用手机的越狱目录我手机 i4 7.1.1 联通 半完美越狱,没装Afc2Add,也没装Appsync 附上  --->我的半完美越狱过程 好了,下面直接正题 一.前提,必须安装ifile! 打开ifile,并转到 /var/mobile/media 目录下,然后点击右上角的 [ 编辑 ]如图: 二.点左下角的 + 号创建,如图: 三.点 [ 类型],选择[符号链接

APUE学习笔记——10.9 信号发送函数kill、 raise、alarm、pause

转载注明出处:Windeal学习笔记 kil和raise kill()用来向进程或进程组发送信号 raise()用来向自身进程发送信号. #include <signal.h> int kill(pid_t pid,int signo); int raise(int signo); Both return: 0 if OK,?1 on error kill向进程号为pid的进程发送signo信号 能够看出 以下两行代码是等价的: kill(getpid(), signo); raise(sig

ZMAN的学习笔记之Python篇:函数可变长参数

ZMAN的学习笔记之Python篇: 1.装饰器 2.函数“可变长参数” 这次来聊聊Python中函数的“可变长参数”,在实际中经常会用到哦~  一.什么是“可变长参数” “可变长参数”就是向一个函数传入不定个数的参数.比如我写一个函数:传入一个学生参加各科目考试的成绩,求平均分,如两个学生分别传入(92, 91, 88)和(88, 95),因为每个学生参加的考试个数不同,因此传入的参数个数也就不同了,遇到这种情况,我们在定义函数的时候,可以使用“可变长参数”. 二.在定义函数时使用“可变长参数