㈠ php裡面如何跨文件訪問變數
PHP變數是有作用域(指定的有效范圍)的:
函數內聲明的變數只對該函數有效,出了函數的范圍就會無效;
同理在函數以外聲明的變數在函數中訪問也是無效的;
函數內的變數跨函數訪問也是無效的。
解決方法:
函數中的變數要想讓其全局有效必須得在變數前面加global關鍵字聲明成全局變數才可以在函數以外訪問到;同理在函數外聲明的函數如果想要在函數中來訪問,也要使用global關鍵字來聲明為全局變數。
關於php變數作用域的示範:
舉例有php文件b.php如下:
<?php
functionfunc1(){
global$a2;
$a1='vara1Infilebfunctionfunc1';
$a2='vara2Infilebfunctionfunc1';
}
?>
然後有php文件a.php如下:
<?php
error_reporting(0);//關閉錯誤報告
include('b.php');//引用b.php
$a3='vara3Infileaoutoffunction';
$a4='vara4Infileaoutoffunction';
functionfunc2(){
global$a5;
$a5='vara5Infileafunctionfunc2';
$a6='vara6Infileafunctionfunc2';
}
functionfunc3(){
echo'printvar$a1to$a6infunctionfunc3:';
var_mp($a1);
var_mp($a2);
var_mp($a3);
var_mp($a4);
var_mp($a5);
var_mp($a6);
}
functionfunc4(){
echo'printvar$a1to$a6infunctionfunc4:';
global$a1;
global$a2;
global$a3;
global$a4;
global$a5;
global$a6;
var_mp($a1);
var_mp($a2);
var_mp($a3);
var_mp($a4);
var_mp($a5);
var_mp($a6);
}
echo'printvar$a1$a2$a5$a6infilea:';
var_mp($a1);
var_mp($a2);
var_mp($a5);
var_mp($a6);
func3();
func4();
func1();
func2();
echo'printvar$a1$a2$a5$a6infilea(aftercallfunc1andfunc2):';
var_mp($a1);
var_mp($a2);
var_mp($a5);
var_mp($a6);
func3();
func4();
?>
執行a.php後就會輸出:
printvar$a1$a2$a5$a6infilea:<!--$a1$a2$a5$a6都被聲明在函數中,此時因為函數未被調用,所以都無法正確取值-->
null
null
null
null
printvar$a1to$a6infunctionfunc3:<!--$a1$a2$a5$a6同上,$a3和$a4因為在函數外聲明所以全部無法正確取值-->
null
null
null
null
null
null
printvar$a1to$a6infunctionfunc4:<!--$a1$a2$a3$a4同上,$a3和$a4用global聲明為全局了,所以可以正確取值-->
null
null
string'vara3Infileaoutoffunction'(length=32)
string'vara4Infileaoutoffunction'(length=32)
null
null
printvar$a1$a2$a5$a6infilea(aftercallfunc1andfunc2):<!--在執行func1和func2之後被關鍵字聲明為全局變數的$a2和$a5可以被正確取值-->
null
string'vara2Infilebfunctionfunc1'(length=31)
string'vara5Infileafunctionfunc2'(length=31)
null
printvar$a1to$a6infunctionfunc3:<!--因為所有變數不是聲明在函數func3外就是被聲明在其他函數中,所以都無法正確取值-->
null
null
null
null
null
null
printvar$a1to$a6infunctionfunc4:<!--除了在其它函數內未被聲明為全局的$a1和$a6,其他變數均被正確取值-->
null
string'vara2Infilebfunctionfunc1'(length=31)
string'vara3Infileaoutoffunction'(length=32)
string'vara4Infileaoutoffunction'(length=32)
string'vara5Infileafunctionfunc2'(length=31)
null
上面的代碼可以讓你很好的理解變數作用域的規則。
㈡ php調用自定義函數
&引用符號。
不加引用時候,你傳進去的$a被復制了一份,然後你在函數裡面改變$a實際上是改變復制的那個,原來的那個不變,退出函數後$a還是原來那個值。
加了引用符號後裡面的$a就是外面的$a的引用,修改了函數裡面的$a就等於修改了外面的$a。
㈢ php function 怎麼用
用戶自定義函數也稱自定義函數,它們不是PHP提供的,是由程序員創建的.由於自己創建了這樣的函數,所以就可以完全控制這些函數.因此可以讓一個函數完全按照自己希望的方式運行
1,申明函數
在PHP中,定義函數的方法同其他編程語言幾乎一樣.下面是PHP申明函數的語法結構:
復制代碼代碼如下:
Function function_name($argument1,$argument2,$argument3,......$argumentn)
{
//函數代碼code
Return 返回值;
}
以上語法結構中,關鍵字的含義如下.
(1)function:用於申明用戶自定義函數的關鍵字.
(2)function_name:要創建的函數名稱.該名稱將在以後被調用時使用.函數名應該唯一,因為PHP不支持重載.在命名函數的時候,需要遵循和變數命名
相同的原則.但是函數名不能以$開頭,而變數可以.
(3)argument:要傳遞給函數的值.函數可以有多個參數,它們之間用逗號.但是參數項是可選的,可以在調用函數的時候不傳遞任何參數.
(4)code:是在函數被調用的時候執行的一段代碼.如果有兩條或者多條語句,則代碼必須用大括弧"{}"括起來.但是,如果只有一條代碼,則不需要大括弧.
(5)Return:將調用的代碼需要的值返回.任何類型都可以返回,包括列表和對象.這導致函數立即結束它的運行,並且將控制權傳遞回它被調用的行.
2,無參數函數
代碼func_1.php
復制代碼代碼如下:
<?php
require 'a.php';
echo "我不會被執行!";
?>
3,有參數函數
PHP支持按值傳遞參數(默認),通過引用傳遞和默認參數值.可變長度參數列表僅在PHP4和後繼版本中被支持.
(1)值傳遞參數.按值進行參數傳遞是PHP的默認傳遞方式.使用這個方法,必須在主程序調用時傳遞一個值(參數).
代碼sum.php
復制代碼代碼如下:
<?php
function sum ($a,$b)
{
Echo $a+$b;
}
sum(100,20); //開始調用該函數
?>
(2)引用參數.在按照值傳遞的時候,只有參數的副本傳遞給被調用的函數.但是在被調用函數內部對這些值的任何修改,都不會影響調用函數
中的原始值.引用傳遞其實也就是地址傳遞,將一個變數的地址作為參數傳遞.
代碼valuechange.php
復制代碼代碼如下:
<?php
$myNum=100;
function Valuechange ($number)
{
$number=$number+1;
Echo $number . "<br>";
}
Valuechange($myNum);
Echo $myNum;
?>
(3)默認值參數.使用默認的參數值傳遞方法,函數必須在調用的時候有一個參數.如果沒有使用的值,就把默認值傳遞給函數參數.默認值必須是常量表達式,不是變數,
類成員或者函數調用.
提示:當使用默認參數時,任何默認參數必須放在非默認參數的右側;否則,可能函數不會按照預期的情況工作.
代碼func_default.php
復制代碼代碼如下:
<?php
$myNum=100;
function Valuechange ($number)
{
$number=$number+1;
Echo $number . "<br>";
}
Valuechange($myNum);
Echo $myNum;
?>
㈣ php如何調用外部php文件中的函數
在實驗的時候發現是可以的,代碼如下
<?php
function func(){ echo "I'm a external function <br />"; }
class Test {
function doExternalFunction($_externalFunc, $_param){
func();
$_externalFunc($_param);
}
}
function sayHello($_param){
echo "hello, $_param";
};
$name = "HanMeiMei";
$test = new Test();
$test->doExternalFunction("sayHello", $name);
?>
在調用Test類實例的doExternalFunction()方法時,外部的func()方法是可以運行的,因為它是全局的。但是建議不要這樣使用,
因為Test::doExternalFunction()對func()函數有依賴,當項目比較大時,而func()和Test類沒有同時引入到一個文件中來,會引
起錯誤。比較理想的情況是,使用回調函數的形式來調用外部函數,就像執行在Test::doExternalFunction()執行sayHello()一樣