2012-09-01 64 views
-5

里有的init.php码3个编译错误:未定义的变量问题

未定义的变量$ IND

未定义的变量$ popsize

未定义的变量$ CHROM

如何正确解决这个问题?

main.php

include_once 'init.php'; 

class Individual { 
    public $genes = array(); 
    //... 
} 

class Population { 
    public $ind = array(); 
    public $ind_ptr; 
    public function setIndPtr(Individual $ind) { 
     $this->ind_ptr = $ind; 
    } 
} 

$popsize = 10; 
$chrom = 5; 
$pop = new Population(); 
$pop_ptr = new Population(); 

$pop = init(pop_ptr); 

的init.php

function init(Population $pop_ptr) { 
     $pop_ptr->setIndPtr($ind[0]); 
     for ($i = 0 ; $i < $popsize ; $i++) { 
     for ($j = 0; $j < $chrom; $j++) { 
      $d = rand(0,1); 
      if($d >= 0.5) { 
      $pop_ptr->ind_ptr->genes[$j] = 1; 
      } 
      else { 
      $pop_ptr->ind_ptr->genes[$j] = 0; 
      } 
     } 
     $pop_ptr->setIndPtr($ind[$i+1]); 
     } 
     $pop_ptr->setIndPtr($ind[0]); 

     return $pop_ptr; 
    } 
+2

你的错误说的一切 - 没有像“$ ind”这样的数组,$ popsize和$ chrom在另一个范围内定义。你可以让它们成为全局的,但更好的方法是通过参数传递给init函数。 – Cyprian

+0

@Cyprian:好的,init($ pop_ptr,$ popsize,$ chrom)帮助删除了第二和第三个警告消息。但$ ind是在pop_ptr(类Population)中定义的。为什么在init中看不到? – Gusgus

+0

,因为“ind”是pop_ptr的属性。所以如果你想引用这个变量,你可以这样做:$ pop_ptr-> ind [0](不是$ ind [0]) – Cyprian

回答

1

它的范围的问题:变量是不共享的过文件,除非你让他们全球!

(严重解释)的变量,如

inc.php

$a=1; 

main.php

include "inc.php"; 
print $a 

将工作

然而

inc.php

function func() 
{ 
$a=1; 
} 

main.php

include "inc.php"; 
func(); 
print $a; 

一不可。

希望能让它更清晰。在功能范围

+0

好了,init($ pop_ptr,$ popsize,$ chrom)帮助删除2nd和第三条警告信息。但$ ind是在pop_ptr中定义的。为什么无法看到以及如何解决这个问题?我是否也需要将它传递给函数'init'? – Gusgus

+1

变量* *共享“包含文件”。 – deceze

+0

@Core Xii:我知道我的问题是非常基本的。但是我仍然不明白为什么'ind'不能在'init'函数中看到,如果我传递'pop_ptr(Population class)。 'ind'是在Population类中定义的。 – Gusgus

0

全局变量需要全球使用前必须显式声明:

<?php 
function foo() 
    { 
    global $global_variable_from_outside_function_scope; 
    $global_variable_from_outside_function_scope += 1; 
    } 

至于$ind,有没有这样的变量存在。你想要更类似$pop_ptr -> ind。再次阅读PHP docs在类,范围等。

+0

Oook,现在我看到了.. – Gusgus

+0

$ pop_ptr-> setIndPtr($ pop_ptr - > $ ind [0]);为什么它说'$ ind = null'?它在Population类中定义为$ ind = array()。 – Gusgus

+0

访问对象属性时,不要使用'$'美元符号。只需'$ pop_ptr - > ind [0]'。 –