㈠ 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()一样