2017-05-31 64 views
1

跨越下面的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

由于它是用作参考('如&$ search',请注意符号),这意味着在$搜索原始条目(字符串''cats''例如)获取与SearchGoogle'的'实例覆盖与该搜索词有关。在循环后,'$ searches'看起来像** **'SearchGoogle( '猫'),SearchGoogle( '狗'),SearchGoogle( '鸟')',而不是' '猫', '狗',“鸟“'。 – ccKep

+0

感谢您提供简单而紧凑的解释。那很酷。我如何将你的帖子标记为帮助我的帖子? –

+0

这是一条评论,你不能(除了upvoting)。我应该张贴作为一个答案,但不喜欢它满足了我的标准;-)你可以只接受@ÁlvaroGonzález的答案,因为它具有相同的信息。 – ccKep

回答

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类的实例替换数组中的字符串。