首頁 後端開發 php教程 PHP学习笔记5:代码重用和函数

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

Jun 23, 2016 pm 01:24 PM

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


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、一个好的静态页面模板

例子:

...



...


...


....


...



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。例子:

 function my_function() {

?>

My function was called

 }

?>


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的应用程序要求使用如此负责的数据结构。在很多情况下,递归可以用来取代循环,因为二者都是重复做一些事情。递归函数比循环慢而且要占用更多内存,所以应该尽可能多用些循环。


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

   {

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

   }

   return;

}


reverse_r('Hello');

echo '
';

reverse_i('Hello');


?>


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

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


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

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

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

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

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

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


本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1666
14
CakePHP 教程
1425
52
Laravel 教程
1327
25
PHP教程
1273
29
C# 教程
1253
24
說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? 說明PHP中的安全密碼散列(例如,password_hash,password_verify)。為什麼不使用MD5或SHA1? Apr 17, 2025 am 12:06 AM

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP和Python:比較兩種流行的編程語言 PHP和Python:比較兩種流行的編程語言 Apr 14, 2025 am 12:13 AM

PHP和Python各有優勢,選擇依據項目需求。 1.PHP適合web開發,尤其快速開發和維護網站。 2.Python適用於數據科學、機器學習和人工智能,語法簡潔,適合初學者。

PHP行動:現實世界中的示例和應用程序 PHP行動:現實世界中的示例和應用程序 Apr 14, 2025 am 12:19 AM

PHP在電子商務、內容管理系統和API開發中廣泛應用。 1)電子商務:用於購物車功能和支付處理。 2)內容管理系統:用於動態內容生成和用戶管理。 3)API開發:用於RESTfulAPI開發和API安全性。通過性能優化和最佳實踐,PHP應用的效率和可維護性得以提升。

PHP:網絡開發的關鍵語言 PHP:網絡開發的關鍵語言 Apr 13, 2025 am 12:08 AM

PHP是一種廣泛應用於服務器端的腳本語言,特別適合web開發。 1.PHP可以嵌入HTML,處理HTTP請求和響應,支持多種數據庫。 2.PHP用於生成動態網頁內容,處理表單數據,訪問數據庫等,具有強大的社區支持和開源資源。 3.PHP是解釋型語言,執行過程包括詞法分析、語法分析、編譯和執行。 4.PHP可以與MySQL結合用於用戶註冊系統等高級應用。 5.調試PHP時,可使用error_reporting()和var_dump()等函數。 6.優化PHP代碼可通過緩存機制、優化數據庫查詢和使用內置函數。 7

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型? Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP的持久相關性:它還活著嗎? PHP的持久相關性:它還活著嗎? Apr 14, 2025 am 12:12 AM

PHP仍然具有活力,其在現代編程領域中依然佔據重要地位。 1)PHP的簡單易學和強大社區支持使其在Web開發中廣泛應用;2)其靈活性和穩定性使其在處理Web表單、數據庫操作和文件處理等方面表現出色;3)PHP不斷進化和優化,適用於初學者和經驗豐富的開發者。

PHP和Python:代碼示例和比較 PHP和Python:代碼示例和比較 Apr 15, 2025 am 12:07 AM

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

PHP與其他語言:比較 PHP與其他語言:比較 Apr 13, 2025 am 12:19 AM

PHP適合web開發,特別是在快速開發和處理動態內容方面表現出色,但不擅長數據科學和企業級應用。與Python相比,PHP在web開發中更具優勢,但在數據科學領域不如Python;與Java相比,PHP在企業級應用中表現較差,但在web開發中更靈活;與JavaScript相比,PHP在後端開發中更簡潔,但在前端開發中不如JavaScript。

See all articles