1 require和include函数
相同点:用法几乎相同
唯一区别: require()函数会给出一个致命错误,而include()只给一个警告。
变种require_once和include_once:
防止错误的引入同样的函数库两次。出现重复定义的错误。而原版本的运行速度较快。
2 require用法
php不会查看require函数中文件的扩展名。使用require()语句载入文件page.html,文件内任何php命令都会被处理。但php代码放到php标记之间才会被处理成php代码。否则,代码将被视为文本或html脚本不会被执行。
// page.html
echo "this is in php env";
?>
echo "this is out of php env and printed in text format";
注意:通常,php只解析扩展名被定义为.php的文件。而require函数则不同。
3 调用未定义的函数时,怎么办?
检查:
1 函数名称的拼写是否正确
2 函数是否存在于所用的php版本库中
4 函数名称的大小写
请注意:
函数调用不区分大小写,所以调用function_name()和Function_name()或FUNCTION_NAME()都是有效的,而且返回相同的结果。
但是, 变量名是区分大小写的。所以$Name和$name是两个不同的变量。
5 封闭php标记
function my_fun() {
?>//这里必须有php封闭标记
my function was called.
}
?>
6 PHP内置函数
所谓的PHP内置函数,就是在php程序的库里面规定以了的函数,比如echo,str_replace等。
在所有的php脚本中都可以使用php内置函数,但如果声明自己的函数,那它们就只能在自己的脚本中使用。
php不支持函数重载,所以不能和内置函数重名。
因此,避免再多个脚本中定义相同的函数名。
7 可变函数
function foo()
{
echo "In foo()
\n";
}
$func = 'foo';
$func();
$func()并不是一个函数合法名称,但是它也可以正确执行,这是根据$func的值来确定。php取出保存在$func中的值,寻找具有那个名称的函数,并且调用该函数。这种函数被称为可变函数。
8 echo对变量的影响
function fn() {
$var = "contents";
}
fn();
echo $var; // 什么也没有输出
// 如下所示的例子刚好相反。在函数外部声明一个变量,然后在函数内部使用它
function fn() {
echo "inside the function, \$var = ".$var. "
"; // 创建一个局部变量 $var
$var = "contents 2"; // 改变局部变量 $var 的值
echo "inside the function, \$var = ".$var. "
";
}
$var = "contents 1";
fn();
echo "outside the function, \$var = ".$var. "
"
// output
inside the function, $var =
inside the function, $var = contents 2
outside the function, $var = contents 1 // 全局 $var 没有改变
9 global关键字
global可以用来手动指定一个在函数中定义或使用的变量具有全局作用域。
function fn() {
global $var;
$var = "contents";
echo "inside the function, \$var = ". $var ."
";
}
fn();
echo "outside the function, \$var = ". $var ."
";
// output
inside the function, $var = contents
outside the function, $var = contents
变量的作用域是从执行global $var这一句开始的。
当一个变量要在整个脚本中都要用到,在脚本的开始处使用关键字global
10 参数引用传递
function increment(&$value, $amount =1) {
$value=$value+$amount;
}
$value = 1;
echo $value; // print 1
increment($value);
echo $value; // print 2
11 类的属性
class A
{
public $attribute;
public __construct()
{
$this->date = date('Y-m-d');
}
// 内部通过 __set __get 访问实现属性设置和访问
public __set($name, $value) {
$this->$name = $value;
}
public __get($name) {
return $this->$name;
}
}
$a = new A();
// 在类中使用 $this 调用一个未定义的属性时,php5 会自动创建一个属性供使用,且这个被创建的属性默认方法权限是 public
echo $a->date;
echo '
';
$a->$attribute = 5; // 该语句将间接调用__set()函数,将$name参数设置为“attribute”,而$value的值设置为5。
12 使用 final 关键字禁止继承和重载
class A
{
public $attribute = "default value";
final function operation(){
echo '不能被子类重载';
}
}
// 也可以使用 final 关键在来禁止一个类被继承。
final class A
{
...
}
13 PHP 面向对象的高级功能
13.1 使用 Per-class 常量
class Math
{
const pi = 3.1415926;
}
echo "Math::pi = ".Math::pi."\n"; // 不需要初始化类就可以访问
13.2 检查类的类型和类型提示
instanceof 关键字允许检查一个对象的类型。可以检查一个对象是否是特定类的实例,是否是从某个类过来或者是否实现了某个接口。
class A {}
class B extends A {}
interface Displayable {}
{$b instanceof B} 返回 true
{$b instanceof A} 返回 true
{$b instanceof Displayable} 返回false
待续…
14 PHP 中的this self parent
this 是在类实例化的时指向其本身的引用。
self 是指向类本身,不指向任何已经实例化的对象。一般self使用来指向类中的静态变量或者常量。
parent 是指向父类的的应用,一般使用parent调用父类的构造函数或者方法。