函数
创建PHP函数
函数是通过调用函数来执行的
语法1
2
3
4
5
6
function functionName()
{
// 要执行的代码
}
PHP函数准则:
- 函数的名称应该提示出它的功能
- 函数名称以字母或下划线开头,不能以数字开头
例如1
2
3
4
5
6
7
8
function writeName()
{
echo "Kai Jim Refsnes";
}
echo "My name is ";
writeName();
运行结果1
My name is Kai Jim Refsnes
添加参数
为了给函数添加更多的功能,我们可以添加参数,参数类似于变量
参数就在函数名称后面的一个括号内指定
例如1
2
3
4
5
6
7
8
9
10
11
12
function writeName($fname)
{
echo $fname . " Refsnes.\n";
}
echo "My name is ";
writeName("Kai Jim");
echo "My sister's name is ";
writeName("Hege");
echo "My brother's name is ";
writeName("Stale");
运行结果1
2
3My name is Kai Jim Refsnes.
My sister's name is Hege Refsnes.
My brother's name is Stale Refsnes.
还可以为两个参数1
2
3
4
5
6
7
8
9
10
11
12
function writeName($fname,$punctuation)
{
echo $fname . " Refsnes" . $punctuation . "\n";
}
echo "My name is ";
writeName("Kai Jim",".");
echo "My sister's name is ";
writeName("Hege","!");
echo "My brother's name is ";
writeName("Ståle","?");
运行结果1
2
3My name is Kai Jim Refsnes.
My sister's name is Hege Refsnes!
My brother's name is Ståle Refsnes?
返回值
使用return语句
1 |
|
运行结果1
1 + 16 = 17
魔术常量
PHP向它运行的任何脚本提供了大量的预定义常量
还可以通过加载拓展库来实现更多常量
有八个魔术常量它们的值随着它们在代码中的位置改变而改变
_LINE_
文件中的当前行号1
2
echo '这是第 " ' . __LINE__ . ' " 行';
运行结果1
这是第 " 2 " 行
_FILE_
文件的完整路径和文件名。如果用在被包含文件中,则返回被包含的文件名
从PHP4.0.2后,总是包含一个绝对路径
1 |
|
运行结果1
该文件位于 " F:\default\PHP_default\test1.php "
_DIR_
返回文件所在的目录。如果用在被包括文件中,则返回被包含的文件所在的目录
等价于dirname(_FILE_)。除非是根目录,否则目录名不包括末尾的斜杠
1 |
|
运行结果1
该文件位于 " F:\default\PHP_default "
_FUNCTION_
返回函数所在的函数名称。自PHP5起本常量返回该函数被定义时的名字(区分大小写)
1 |
|
运行结果1
函数名为:test
_CLASS_
返回所在类的名称。自PHP5起本常量返回该类被定义时的名字(区分大小写)
1 |
|
运行结果1
2类名为:test
函数名为:_print
_TRAIT_
Trait的名字。自PHP5.4起,PHP实现代码复用的一个方法,称为traits
1 |
|
运行结果1
Hello World!
_METHOD_
返回类的方法名。返回该方法被定义时的名字1
2
3
4
5
function test() {
echo '函数名为:' . __METHOD__ ;
}
test();
运行结果1
函数名为:test
_NAMESPACE_
返回当前命名空间的名称(区分大小写)1
2
3
4
namespace MyProject;
echo '命名空间为:"', __NAMESPACE__, '"'; // 输出 "MyProject"
运行结果1
命名空间为:"MyProject"
总结
1.PHP中定义函数使用function关键字
2.魔术常量_FUNCTION_和_METHOD_的区别在于,_FUNCTION_只返回方法(函数)的名字;_METHOD_会返回类名和方法的名字
3.PHP中的trait关键字是实现代码复用的方法,是为了PHP的单继承性质而准备的一种代码复用机制
trait的基本用法1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<?php
trait ezcReflectionReturnInfo {
function getReturnType() { /*1*/ }
function getReturnDescription() { /*2*/ }
}
class ezcReflectionMethod extends ReflectionMethod {
use ezcReflectionReturnInfo;
/* ... */
}
class ezcReflectionFunction extends ReflectionFunction {
use ezcReflectionReturnInfo;
/* ... */
}
优先级顺序:
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Base {
public function sayHello() {
echo 'Hello ';
}
}
trait SayWorld {
public function sayHello() {
parent::sayHello();
echo 'World!';
}
}
class MyHelloWorld extends Base {
use SayWorld;
}
$o = new MyHelloWorld();
$o->sayHello();
修改方法的访问控制
1 |
|
更多用法可以参考手册
https://www.php.net/manual/zh/language.oop5.traits.php