全局空间、PHP 字符串的坑

| 选择喜欢的代码风格  

注意这里的坑:如果没有定义任何命名空间,所有的类与函数的定义都是在全局空间,与 PHP 引入命名空间概念前一样。在名称前加上前缀 \ 表示该名称是全局空间中的名称,即使该名称位于其它的命名空间中时也是如此。

<?php
namespace A\B\C;

/* 这个函数是 A\B\C\fopen */
function fopen() { 
     /* ... */
     $f = \fopen(...); // 调用全局的fopen函数
     return $f;
} 
?>

推荐更多阅读:

Strings


字符串的连接建议

  • PHP建议超过120个字符,考虑用连接符连接你的字符串
  • 为了增加可读性,用连接运算符而不是连接赋值运算符
  • 在变量的原始范围内,当连接使用新行时,建议要缩进

<?php
$a  = 'Multi-line example';    // 用了 (.=) 连接字符串
$a .= "\n";
$a .= 'of what not to do';

// vs

$a = 'Multi-line example'      // 字符串运算符  (.)
    . "\n"                     // 新的一行缩进
    . 'of what to do';

推荐更多 PHP String 的阅读:

String 字符串的类型


这里主要说下著名的PHP字符串到底用单引号还是双引号的问题:

  • 单引号不会解析里面的变量,比如 'some $thing', 会原样输出…如果需要输出变量 $thing,需要用字符串连接符连接他们: 'some '.$string
  • 要表达一个单引号自身,需在它的前面加个反斜线(\)来转义。要表达一个反斜线自身,则用两个反斜线(\\)。其它任何方式的反斜线都会被当成反斜线本身:也就是说如果想使用其它转义序列例如 \r 或者 \n,并不代表任何特殊含义,就单纯是这两个字符本身。
  • 双引号是被比喻为瑞士军刀串。 它们不仅会解析上面提到的变量,而且还会解析各种特殊字符,例如 \n 表示换行符,\t 表示制表符,等等。

<?php
// 单引号不会解析里面的变量
echo 'This is my string, look at how pretty it is.';   

/**
 * Output:
 *
 * This is my string, look at how pretty it is.
 */

推荐更多阅读:

<?php
// 单引号连接变量的一种方式
echo 'phptherightway is ' . $adjective . '.'     
    . "\n"                                       // 双引号
    . 'I love learning' . $code . '!';

// vs

echo "phptherightway is $adjective.\n I love learning $code!"  // 强大的双引号

双引号可以包含变量; 这被称为“插值”。

<?php
$juice = 'plum';
echo "I like $juice juice";    //输出: I like plum juice

但注意这里有个坑,看下面代码:

<?php
$juice = 'plum';
//注意插值 $juice 不被解析!
echo "I drank some juice made of $juices";    

// vs

$juice = 'plum';
// $juice 这样{}包起来才被解析
echo "I drank some juice made of {$juice}s";    

/**
 * 复杂变量也将在大括号内解析
 */

$juice = array('apple', 'orange', 'plum');
// $juice[1] 将被解析替换
echo "I drank some juice made of {$juice[1]}s";  

推荐更多阅读:



发表评论