内部函数

也称为内置函数,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 继承类,不过只能单继承。属性和方法有 publicprivate 和 protected 做访问控制,默认为 public,在类里定义常量不需要 $,用(::)范围解析符可以调用父类的方法,访问类的静态变量、静态方法和常量。

基本概念

定义

  • 每个类的定义都以关键字 class 开头,后面跟着类名(非保留字)。
  • 类名后跟着一对花括号,里面包含有类属性和方法的定义。
<?php
class A
{
    //属性
    public $a;
    private $b;

    //方法
    public function actionA()
    {

    }
}
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。