2011-10-18 50 views
1

這是關於RAW php編碼的。我有一個頁面 - 「config.php」,這裏有一些聲明。在PHP中獲取函數聲明的值

//config.php

<?php 
$myvalue = "This is a test"; 
include("functions.php"); 
?> 

//functions.php

<?php 
function testFunction() 
{ 
    $dd = $myvalue; 
    echo $dd; 
} 
?> 

而且當我打電話「testFunction()」從另一個頁面像「頁面.php「我想讓它回聲」這是測試「。我怎樣才能做到這一點? 「config.php」包含在「page.php」中。希望這種情況是可以理解的。

//page.php

<?php 
include('config.php'); 
testFunction(); 
?> 
+0

如果你想檢查你的函數是否存在/定義,你可以使用[function_exists](http://php.net/function_defined)就像'<?php echo function_exists('testFunction')?>' – user973254

回答

3

在你的函數的第一行,添加:

global $myvalue; 

$myvalue -variable會轉換爲functions.php當你包括PHP文件在聲明變量之後,但是你必須告訴你的函數使用這個變量的global變量。

你的功能應該是這樣的:

function testFunction() 
{ 
    global $myvalue; 
    $dd = $myvalue; 
    echo $dd; 
} 
+0

你怎麼能說變量不是功能具體? – hakre

+0

不是學術上合適的話;只是試圖解釋這是一個全局變量而不是函數內的局部變量(因此是「函數特定的」-term)。現在刪除括號...... – poplitea

+0

那麼其他建議是通過使用函數參數並適當地調用函數使其成爲局部變量。 – hakre

1

您需要聲明myvalue的是全球性的,或者使用$ _GLOBALS陣列像這樣:

<?php 
function testFunction() 
{ 
    $dd = $_GLOBALS['myvalue']; 
    echo $dd; 
} 
?> 
+0

雖然這是一個_option_,但我建議不要使用全局變量,因爲很多事情可能會出錯。此外,它可能只是一句話,但「必須」不會是一個準確的說法。 –

2

你與碰撞是什麼PHP Variable Scope

變量($foo)只能在function()聲明的外部或內部訪問(但不要跨越此邊界,除非使用global修飾符)。但是,整個過程中都可以看到constants

例子:

<?php 
    $foo = 'bar'; 
    define('CONST_FOO', 'bar'); 

    echo $foo;  // output: bar 
    echo CONST_FOO; // output: bar 

    function Foo(){ 
    echo $foo;  // undefined, out of scope 
    echo CONST_FOO; // output: bar 
    } 
    function Bar(){ 
    global $foo; // now $foo can be seen 

    echo $foo;  // output: bar 
    echo CONST_FOO; // output: bar 
    } 
2

,應指定一個函數使用函數的參數:

的functions.php

<?php 
function testFunction($value) 
{ 
    echo $value; 
} 
?> 

然後在頁面。PHP

<?php 
include('config.php'); 
testFunction($myvalue); 
?> 

這將會使你的代碼更加模塊化。

看得那麼清楚:Is include()/require() with 「side effects」 a bad practice?

+0

我同意傳遞變量作爲參數通常是一個更好的解決方案(儘管這不是嚴格的問題在這裏)。 Upvote獲得有用的答案。 – poplitea

2

$myValue是全球性的,在默認情況下,不能從函數範圍內看到。你可以明確地使其可像這樣:

<?php 
function testFunction() 
{ 
    global $myValue; 
    $dd = $myvalue; 
    echo $dd; 
} 

或者你可以定義一個常量:

<?php 
define ('MY_VALUE', 'This is a test'); 

// functions.php 
function testFunction() 
{ 
    $dd = MY_VALUE; 
    echo $dd; 
} 

或者你可以把一個配置類的靜態或const成員:

<?php 
// config.php 
class Config { 
    public static $myValue = 'This is a test'; 
    const myConst = 'This is a test'; 
} 

// functions.php 
require_once 'config.php'; 
function testFunction() 
{ 
    $dd = Config::$myValue; 
    echo $dd; 

    $dd = Config::myConst; 
    echo $dd; 
}