PHP 的真正威力源自于它的函数。
在 PHP 中,提供了超过 1000 个内建的函数。
<html>
<body>
<?php
function writeName()
{
	echo "Kai Jim Refsnes";
}
echo "My name is ";
writeName();
//函数传参
function writeName($fname,$punctuation)
{
	echo $fname . " Refsnes" . $punctuation . "<br>";
}
echo "My name is ";
writeName("Kai Jim",".");
echo "My sister‘s name is ";
//函数返回值
function add($x,$y)
{
	$total=$x+$y;
	return $total;
}
echo "1 + 16 = " . add(1,16);
?>
</body>
</html>
有八个魔术常量它们的值随着它们在代码中的位置改变而改变。
<?php
function test() {
	echo  ‘函数名为:‘ . __FUNCTION__ ;
}
test();
?>
在 PHP 4 中该值总是小写字母的。类名包括其被声明的作用区域(例如 Foo\Bar)。注意自 PHP 5.4 起 CLASS 对 trait 也起作用。当用在 trait 方法中时,CLASS 是调用 trait 方法的类的名字。
<?php
class test {
	function _print() {
		echo ‘类名为:‘  . __CLASS__ . "<br>";
		echo  ‘函数名为:‘ . __FUNCTION__ ;
	}
}
$t = new test();
$t->_print();
?>
Trait 名包括其被声明的作用区域(例如 Foo\Bar)。
从基类继承的成员被插入的 SayWorld Trait 中的 MyHelloWorld 方法所覆盖。其行为 MyHelloWorld 类中定义的方法一致。优先顺序是当前类中的方法会覆盖 trait 方法,而 trait 方法又覆盖了基类中的方法。
<?php
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();
?>
<?php
function test() {
	echo  ‘函数名为:‘ . __METHOD__ ;
}
test();
?>
<?php namespace MyProject; echo ‘命名空间为:"‘, __NAMESPACE__, ‘"‘; // 输出 "MyProject" ?>
PHP 命名空间(namespace)是在PHP 5.3中加入的,如果你学过C#和Java,那命名空间就不算什么新事物。 不过在PHP当中还是有着相当重要的意义。
PHP 命名空间可以解决以下两类问题:
默认情况下,所有常量、类和函数名都放在全局空间下,就和PHP支持命名空间之前一样。
如果一个文件中包含命名空间,它必须在其它所有代码之前声明命名空间
< ?php  
// 定义代码在 ‘MyProject‘ 命名空间中  
namespace MyProject;  
 
// ... 代码 ...  
//也可以在同一个文件中定义不同的命名空间代码
namespace MyProject1;  
// MyProject1 命名空间中的PHP代码  
 
namespace MyProject2;  
// MyProject2 命名空间中的PHP代码    
 
// 另一种语法
namespace MyProject3 {  
 // MyProject3 命名空间中的PHP代码    
}  
?>
在声明命名空间之前唯一合法的代码是用于定义源文件编码方式的 declare 语句。所有非 PHP 代码包括空白符都不能出现在命名空间的声明之前。
<?php
declare(encoding=‘UTF-8‘); //定义多个命名空间和不包含在命名空间中的代码
namespace MyProject {
	const CONNECT_OK = 1;
	class Connection { /* ... */ }
	function connect() { /* ... */  }
}
namespace { // 全局代码
	session_start();
	$a = MyProject\connect();
	echo MyProject\Connection::start();
}
?>
以下代码会出现语法错误:
<html> <?php namespace MyProject; // 命名空间前出现了“<html>” 会致命错误 - 命名空间必须是程序脚本的第一条语句 ?>
子命名空间
<?php
namespace MyProject\Sub\Level;  //声明分层次的单个命名空间
//创建了常量 MyProject\Sub\Level\CONNECT_OK,
//类 MyProject\Sub\Level\Connection 
//和函数 MyProject\Sub\Level\Connect。
const CONNECT_OK = 1;
class Connection { /* ... */ }
function Connect() { /* ... */  }
?>
命名空间使用 
PHP 命名空间中的类名可以通过三种方式引用:
非限定名称,或不包含前缀的类名称,例如 $a=new foo(); 或 foo::staticmethod();。如果当前命名空间是 currentnamespace,foo 将被解析为 currentnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,则 foo 会被解析为foo。 警告:如果命名空间中的函数或常量未定义,则该非限定的函数名称或常量名称会被解析为全局函数名称或常量名称。~~无命名空间前缀的引用,默认在当前命名空间查找,然后到全局命名空间找
限定名称,或包含前缀的名称,例如 $a = new subnamespace\foo(); 或 subnamespace\foo::staticmethod();。如果当前的命名空间是 currentnamespace,则 foo 会被解析为 currentnamespace\subnamespace\foo。如果使用 foo 的代码是全局的,不包含在任何命名空间中的代码,foo 会被解析为subnamespace\foo。 ~~带相对命名空间前缀的(类似相对路径)引用,自动在开头添加调用代码所处的命名空间
完全限定名称,或包含了全局前缀操作符的名称,例如, $a = new \currentnamespace\foo(); 或 \currentnamespace\foo::staticmethod();。在这种情况下,foo 总是被解析为代码中的文字名(literal name)currentnamespace\foo。~~带绝对命名空间前缀的引用(类似绝对路径) 引用路径已明确 不用查找
原文:http://www.cnblogs.com/jiafangfang/p/7401538.html