TShopping

 找回密碼
 註冊
搜索
查看: 1974|回復: 0
打印 上一主題 下一主題

[分享] PHP 字串連接

[複製鏈接]
跳轉到指定樓層
1#
發表於 2019-9-18 22:43:57 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
 
Push to Facebook
前言
在PHP中字串連接的方法與其它的語言有著非常的不同,我們都知道以C語言來說我們可以使用函式strcat()來連接兩個字元陣列,而在Java中我們可以使用+運算子來做字串的連接。

而PHP呢?PHP不同與上述語言,它則使用.運算子來連接字串,而且除了.以外還有許多不同的方式也可以連接字串。

基本使用
字串宣告

在PHP當中可以使用'或者是"來宣告字串,但是這兩個符號宣告出的字串其實是不相同的。

  1. <?php
  2. $str = "Hi, I am Tony.\nNice to meet you.";
  3. echo $str;
  4. // Hi, I am Tony.
  5. // Nice to meet you.

  6. $str = 'Hi, I am Tony.\nNice to meet you.';
  7. echo $str;
  8. // Hi, i am Tony,\nNice to meet you.
複製代碼

由上面範例可以得知使用"宣告的字串可以讓跳脫字元發揮出作用,而使用'宣告的字串則是純字串你輸入什麼就輸出什麼。

字串連接
  1. <?php
  2. $name = 'Tony';

  3. echo "Hi " . $name; // Hi Tony
  4. echo 'Hi ' . $name; // Hi Tony
  5. echo "Hi $name";    // Hi Tony
  6. echo 'Hi $name';    // Hi $name
複製代碼

那麼字串與變數的連接,在"可以很彈性的使用變數,而'只能夠使用.來做連接,而兩者都可以使用格式化輸出sprintf()但這邊就先不提。

由上面得知"可以很彈性的連接變數,那麼它除了變數的連接外,那與陣列、函式以及物件之間該如何連接以及可行性?我們看下面的範例。

陣列範例
  1. <?php
  2. $color = array('black', 'blue');

  3. echo "The sky is $color[1]";     // The sky is blue
  4. echo "The sky is {$color[1]}";   // The sky is blue
  5. echo "The sky is" . $color[1];    // The sky is blue

  6. $student = array('name' => 'Tony', 'age' => 18);

  7. echo "I am $student['name']";    // Error
  8. echo "I am {$student['name']}";  // I am Tony
  9. echo "I am " . $student['name']; // I am Tony
複製代碼

如果輸出以字串當作索引值的陣列時就必須使用{ }將變數跳脫。

函式範例
  1. <?php
  2. function getName() {
  3.     return 'Tony';
  4. }

  5. echo "My name is getName()";    // Error: My name is name()
  6. echo "My name is {getName()}";  // Error: My name is {name()}
  7. echo "My name is " . getName(); // My name is Tony

  8. $name = 'getName';

  9. echo "My name is $name()";     // Error: My name is getName()
  10. echo "My name is {$name()}";   // My name is Tony
  11. echo "My name is " . $name();  // My name is Tony
複製代碼

當輸出函式時並沒辦法使用{ }將函式跳脫,所以還是只能用.來做字串連接,但是以變數為名的還是可以使用{ }來做跳脫。

物件範例
  1. <?php
  2. class Student {
  3.     private static $type = 'student';
  4.     private $name;
  5.     private $age;

  6.     public function __construct($n, $a) {
  7.         $this->name = $n;
  8.         $this->age = $a;

  9.         // Class Variable
  10.         echo "I am $this->age years old";         // I am 18 years old
  11.         echo "I am {$this->age} years old";       // I am 18 years old
  12.         echo "I am " . $this->age . " years old"; // I am 18 years old

  13.         // Class Static Variable
  14.         echo "I am self::$type";                  // Error: I am self::
  15.         echo "I am {self::$type}";                // Error: I am {self::}
  16.         echo "I am " . self::$type;               // I am student
  17.     }

  18.     public static function getType() {
  19.         return self::$type;
  20.     }

  21.     public function getName() {
  22.         return $this->name;
  23.     }

  24.     public function getAge() {
  25.         return $this->age;
  26.     }
  27. }

  28. $student = new Student('Tony', 18);
複製代碼

我們寫一個Student物件,其中包含了類型、姓名以及年齡然後我們做個簡單的測試,結果物件的私有變數可以正常輸出,但是遇到了靜態變數時還是要使用.來做連接。

  1. <?php
  2. $student = new Student('Tony', 18);

  3. // Class Method
  4. echo "I am $student->getAge() years old";         // Error: I am () years old
  5. echo "I am {$student->getAge()} years old";       // I am 18 years old
  6. echo "I am " . $student->getAge() . " years old"; // I am 18 years old

  7. // Class Static Method with Instance
  8. echo "I am $student::getType()";                  // Error
  9. echo "I am {$student::getType()}";                // I am student
  10. echo "I am " . $student::getType();               // I am student

  11. // Class Static Method without Instance
  12. echo "I am Student::getType()";                   // Error: I am Student::getType()
  13. echo "I am {Student::getType()}";                 // Error: I am {Student::getType()}
  14. echo "I am " . Student::getType();                // I am student
複製代碼

承襲上面的物件,我沒從外部去呼叫方法以及靜態方法,擁有實體的方法以及靜態方法可以使用{ }來做,但是沒有實體的靜態方法還是只能使用.來做連接。

小結
由上面範例示範了一半可能會遇到到的情況,並且可以得知PHP在字串的連接上與其它與語言比較起來使用上自由許多。雖然自由但是如果是寫網頁程式的話記得對字串消毒,小心被走後門。

綜合以上結果整理一下幾種輸出方式,見下表:

                  "      {}     .
--------------------------------------
$var            |  OK  |  OK  |  OK  |
$array[0]       |  OK  |  OK  |  OK  |
$array['key']   |      |  OK  |  OK  |
--------------------------------------
function()      |      |      |  OK  |
$function()     |      |  OK  |  OK  |
--------------------------------------
$this->var      |  OK  |  OK  |  OK  |
self::$var      |      |      |  OK  |
--------------------------------------
$class->func()  |      |  OK  |  OK  |
$class::func()  |      |  OK  |  OK  |
Static::func()  |      |      |  OK  |
文章出處

 

臉書網友討論
*滑块验证:
您需要登錄後才可以回帖 登錄 | 註冊 |

本版積分規則



Archiver|手機版|小黑屋|免責聲明|TShopping

GMT+8, 2024-4-26 04:23 , Processed in 0.065179 second(s), 22 queries .

本論壇言論純屬發表者個人意見,與 TShopping綜合論壇 立場無關 如有意見侵犯了您的權益 請寫信聯絡我們。

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回復 返回頂部 返回列表