内部函数
也称为内置函数,PHP 有很多标准的函数和结构。还有一些函数需要和特定地 PHP 扩展模块一起编译,否则在使用它们的时候就会得到一个致命的未定义函数错误。
例如,要使用 image 函数中的 imagecreatetruecolor()
,需要在编译 PHP 的时候加上 GD 的支持。或者,要使用 mysql_connect()
函数,就需要在编译 PHP 的时候加上 MySQL 支持。
调用 phpinfo()
或者 get_loaded_extensions()
可以得知 PHP 加载了那些扩展库。同时还应该注意,很多扩展库默认就是有效的。PHP 手册按照不同的扩展库组织了它们的文档。
Note: 如果传递给函数的参数类型与实际的类型不一致,例如将一个 array 传递给一个 string 类型的变量,那么函数的返回值是不确定的。在这种情况下,通常函数会返回 NULL。但这仅仅是一个惯例,并不一定如此。
参见 function_exists(),函数参考,get_extension_funcs() 和 dl()。
匿名函数
匿名函数(Anonymous functions),也叫闭包函数(closures),允许 临时创建一个没有指定名称的函数。最经常用作回调函数(callback)参数的值。当然,也有其它应用的情况。
匿名函数目前是通过 Closure 类来实现的。
<?php
echo preg_replace_callback('~-([a-z])~', function ($match) {
return strtoupper($match[1]);
}, 'hello-world');
// 输出 helloWorld
闭包函数也可以作为变量的值来使用。PHP 会自动把此种表达式转换成内置类 Closure 的对象实例。把一个 closure 对象赋值给一个变量的方式与普通变量赋值的语法是一样的,最后也要加上分号:
匿名函数变量赋值
<?php
$greet = function($name)
{
printf("Hello %s\r\n", $name);
};
$greet('World');
$greet('PHP');
从父作用域继承变量
闭包可以从父作用域中继承变量。 任何此类变量都应该用 use 语言结构传递进去。 PHP 7.1 起,不能传入此类变量: superglobals、 $this 或者和参数重名。
<?php
$msg = 'hello';
$a = function () {
var_dump($msg);
};
$a();
$b = function () use ($msg) {
var_dump($msg);
};
$b();
$msg = 'hi';
$b();
$c = function () use (&$msg) {
var_dump($msg);
};
$c();
$d = function ($arg) use ($msg) {
var_dump($arg . ' ' . $msg);
};
$d("hello");
结果输出
PHP Notice: Undefined variable: msg in /home/*.php on line 5
NULL
string(5) "hello"
string(5) "hello"
string(2) "hi"
string(8) "hello hi"
从结果可以看出
- 使用 use 可以从父作用域继承变量
- 匿名函数是在定义的时候继承父作用域变量,而不是在调用的时候继承
- 变量使用引用赋值,则原变量发生改变,则引用该变量的变量也会发生变化
类与对象(一)
PHP 中用 class
来定义类,用 new
来实例化对象,用 extends
继承类,不过只能单继承。属性和方法有 public
、private
和 protected
做访问控制,默认为 public,在类里定义常量不需要 $
,用(::
)范围解析符可以调用父类的方法,访问类的静态变量、静态方法和常量。
基本概念
定义
- 每个类的定义都以关键字
class
开头,后面跟着类名(非保留字)。 - 类名后跟着一对花括号,里面包含有类属性和方法的定义。
<?php
class A
{
//属性
public $a;
private $b;
//方法
public function actionA()
{
}
}
评论(0)