需要对给定的PHP代码片段进行一些澄清

时间:2017-05-31 10:17:18

标签: php

遇到以下PHP代码片段

class SearchGoogle extends Thread
{
    public function __construct($query)
    {
        $this->query = $query;
    }

    public function run()
    {
        $this->html = file_get_contents('http://google.fr?q='.$this->query);
    }
}

$searches = ['cats', 'dogs', 'birds'];
foreach ($searches as &$search) {
    $search = new SearchGoogle($search);
    $search->start();
}

我在理解下面的foreach循环时遇到了问题。对我而言看起来像 $search变量同时用作$searches数组的元素和SearchGoogle的实例。这可能在PHP吗?

1 个答案:

答案 0 :(得分:0)

PHP是松散类型的,没有什么可以阻止你重用变量:

$foo = 'Bar';
var_dump($foo);
$foo = M_PI;
var_dump($foo);
$foo = new DateTime();
var_dump($foo);
string(3) "Bar"
float(3.1415926535898)
object(DateTime)#1 (3) {
  ["date"]=>
  string(26) "2017-05-31 12:29:01.000000"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(13) "Europe/Madrid"
}

在这种情况下,代码大致相当于:

$searches = ['cats', 'dogs', 'birds'];
foreach ($searches as $index => $search) {
    $searches[$index] = new SearchGoogle($search);
    $searches[$index]->start();
}

换句话说,它用SearchGoogle类的实例替换数组中的字符串。