面向对象
常量
可以把在类中始终保持不变的值定义为常量。在定义和使用常量的时候不需要使用 $ 符号。
常量的值必须是一个定值,不能是变量,类属性,数学运算的结果或函数调用。
自 PHP 5.3.0 起,可以用一个变量来动态调用类。但该变量的值不能为关键字(如 self,parent 或 static)。
常量的用法
<?php
class MyClass{
const constant = '常量值';
function showConstant() {
echo self::constant . PHP_EOL;
}
}
echo MyClass::constant . PHP_EOL;
$classname = "MyClass";
echo $classname::constant . PHP_EOL;?
$class = new MyClass();
$class->showConstant();
echo $class::constant;
?>
Static 关键字
声明类属性或方法为 static(静态),就可以不实例化类而直接访问。
静态属性不能通过一个类已实例化的对象来访问(但静态方法可以)。
由于静态方法不需要通过对象即可调用,所以伪变量 $this >在静态方法中不可用。
静态属性不可以由对象通过 -> 操作符来访问。
在 PHP ?中,可以用一个变量来动态调用类。但该变量的值不能为关键字
1、关键字 self,parent 或 static。
代码
<?php
class Foo {
public static $my_static = 'foo';
public function staticValue() {
return self::$my_static;
}
}
print Foo::$my_static . PHP_EOL;
$foo = new Foo();
print $foo->staticValue() . PHP_EOL;
?>
is_callable — 检测参数是否为合法的可调用结构
__call() 方法用于监视错误的方法调用。
为了避免当调用的方法不存在时产生错误,可以使用 __call() >方法来避免。该方法在调用的方法不存在时会自动调用,程序仍会继续执行>下去。
语法:
function __call(string $function_name, array $arguments)
{
}
该方法有两个参数,第一个参数 $function_name 会自动接收不存在的方法名,第二个 $args 则以数组的方式接收不存在方法的多个参数。
在类里面加入:
function __call($function_name, $args)
{
echo "你所调用的函数:$function_name(参数:<br />";
var_dump($args);
echo ")不存在!";
}
当调用一个不存在的方法时(如 test() 方法):
$p1=new Person();
$p1->test(2,"test");
输出的结果如下:
你所调用的函数:test(参数:
array(2) {
[0]=>int(2)
[1]=>string(4) "test"
}
)不存在、
class Test1{
public function fun1(){
echo "fun1().........";
}
public function __call($name,$params)
{
echo "{$name}()....";
}
}
$t1 = new Test1();
$t1 -> fun1();
$t1 -> fun2();