Php总结


一、@

是一个错误控制符号,它会把错误信息直接给忽略掉了。忽略的信息存到了$php_errormsg变量里面。但是这个玩意默认是关闭,如果需要的自行打开。

$php_errormsg is a variable containing the text of the last error message generated by PHP. This variable will only be available within the scope in which the error occurred, and only if the track_errors configuration option is turned on (it defaults to off).

  • 代码样例啥的看官网吧,就不写了。参考

NOTE: 不推荐使用这个@,因为它直接隐藏了错误信息,如果出现问题不好排查和定位。


二、finaly

只能用于class(类)method(方法)NOTE: 自能用于这个两个地方哟

范围 作用
class(类) 不能继承
method(方法) 不能重写

三、字符串定义

有四种定义模式

类型 样式 说明
单引号 'context' 作为一个总体,除了本身转义外,不能输出其他的转义字符和变量引用。
双引号 "context" 可以包含转义字符和变量引用
单三字符 <<<'EOF' context EOF; 类似于单引号
双三字符 <<<EOF context EOF; 类似于双引号
$var = "Hello"; // 测试变量
$signe = 'ok \' " \n\t ${var}'; // 单引号
$double = "ok ' \" \n\t ${var}"; // 双引号
$signeT = <<< 'EOF'
ok \t\n ok ${var}
EOF; // 单三字符
$doubleT = <<< "EOF"
ok \t\n ok ${var}
EOF; // 双三字符 NOTE:还可以不带双引号

echo "\n" . '-------' . "\n";
echo $signe;
echo "\n" . '-------' . "\n";
echo $double;
echo "\n" . '-------' . "\n";
echo $signeT;
echo "\n" . '-------' . "\n";
echo $doubleT;
echo "\n" . '-------' . "\n";
-------
ok ' " \n\t ${var}
-------
ok \' " 
     Hello
-------
ok \t\n ok ${var}
-------
ok  
 ok Hello
-------

四、yield

生成器函数

  • 1、被调用的时候,它返回一个可以被遍历的对象。
  • 2、当遍历这个对象的时候,每次都调用生成器函数。
  • 3、生成器函数会记录状态
// example_3 返回的是一个可以遍历的对象
function example_3()
{
    yield 1 => 3; // 可以使用 key=>value形式

    for ($i = 0; $i < 3; $i++) {
        $data = (yield $i => 4); // 可以赋值 但是需要使用`()`
        echo $data;
    }
}

// example_2 返回的是一个可以遍历的对象
function example_2()
{

    $i = 3; // $i 的状态会记录下来 依次 3,2,1
    yield $i--;
    yield $i--;
    yield $i--;
}
// example_1 返回的是一个可以遍历的对象
function example_1()
{

    for ($i = 1; $i <= 3; $i++) {
        yield $i;
    }
}

$generator = example_1();
foreach ($generator as $value) { // 会每次调用生成器函数(示例:example_1)
    echo "$value\n";
}

$generator2 = example_2();
foreach ($generator2 as $value) { // 会每次调用生成器函数(示例:example_2)
    echo "$value\n";
}

$generator3 = example_3();
foreach ($generator3 as $index => $value) { // 会每次调用生成器函数(示例:example_3)
    $generator3->send('stop');
    echo "$index,$value\n";
}

yield from (php7+) 可以引用其他类型的数据

 function example()
{
    yield 1;
    yield 2;
    yield from [3, 4]; // 数组
    yield from new ArrayIterator([5, 6]); // 对象
    yield from two(); // 方法
    yield 9;
    yield 10;
}

function two()
{
    yield 7;
    yield from one();
}

function one()
{
    yield 8;
}

foreach (example() as $num) {
    echo "$num ";
}
echo "\n";

// 可以用于实现 协程

参考


五、线程

pthreads命令行
协程框架


Leave a Reply

Your email address will not be published. Required fields are marked *