php 函数里未定义函数或变量的变量怎么在函数外使用

为了账号安全,请及时绑定邮箱和手机
PHP中变量要先声明才能用,为什么PHP函数可以在声明前就调用的?根据的原理是什么?
PHP中变量要先声明才能用,为什么PHP函数可以在声明前就调用的?
Copyright (C)
All Rights Reserved | 京ICP备 号-2PHP7 为什么不直接支持变量类型声明,而仅仅是在函数参数中定义? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
Sponsored by
国内领先的实时后端云野狗 API 可用于开发即时聊天、网络游戏、实时定位等实时场景传输快!响应快!入门快!
Promoted by
PHP7 为什么不直接支持变量类型声明,而仅仅是在函数参数中定义?
19:03:22 +08:00 · 4683 次点击
现在可以这么写了:
function func(int $param_1,int $param_2){
return $param_1 + $param_2;
$result = func('23',23.44);//47
我觉得能够这样写就更好了:
int $param_1 = 1;
string $param_2 = &hello world&;
PHP7 Reference:
安装小教程:
我觉得还是强类型好,各位小伙伴如何认为?(:
27 回复 &| &直到
21:59:17 +08:00
& & 19:09:19 +08:00
你可以 $param_1 = (int)1;
& & 23:03:16 +08:00
因为这样的话对于之前的几个版本 变动太大了,虽然仅仅现在这样就已经搞的很不兼容了,但还是要考虑向下兼容问题。
& & 23:21:20 +08:00
函数一般是一个人写的,类型自己清楚。
本地变量的类型推导是比较简单的,只要给出函数参数类型,就能写出type checker,从而提前保证类型安全。
当然函数参数的类型也能推导,这就比较复杂了(unification?)。
& & 23:34:30 +08:00
动态语言就是变量没类型,值才有类型
& & 01:25:20 +08:00
语言和用户互相影响。现在用PHP的人应该都习惯了弱类型,就没必要增加这个feature。喜欢强类型的人可以选择别的语言
& & 04:48:17 +08:00
function e(string $param1,string $parma2):int
echo e('1',2.)
& & 04:58:05 +08:00 via iPhone
这…JS都不敢大声说话了
& & 05:03:20 +08:00
php本来就是弱类型的语言,你非要人家转型。。。
& & 07:52:39 +08:00
为何一定要强类型
& & 08:23:16 +08:00 via iPhone
通过赋值转换类型是脚本语言的最大特色了吧,而且函数上规定类型也是可选的,只是方便了做类型校验。如果变量也可以声明类型,那就需要增加一种表示方法了,例如#a或者$$a这种,和原本的区分开,表示此变量类型无法转化
& & 08:41:19 +08:00
主要是考虑兼容性了,良好的向下兼容是PHP得以持续发展的秘密武器,反面例子可参考Python3与Perl6
& & 08:50:01 +08:00 via iPhone
应该是兼容的问题了,保证了php7和之前版本的兼容,而不是像python3和python2...
& & 09:22:16 +08:00
& & 09:36:21 +08:00
& & 09:46:16 +08:00
支持强类型。。。
& & 09:55:39 +08:00
支持强类型的
& & 11:16:51 +08:00
5.6也可以这么玩,而且可以指定一个类的类型,
比如 class A ,那么在调用的时候可以 function a(A $param)
& & 14:22:53 +08:00
$intA,$strB,$arrC,$objD
& & 14:39:44 +08:00 via iPhone
我记得函数参数的类型只能算得上“类型提示”,没有严格检查的。这种写法用的多的地方应该是依赖注入吧。
& & 14:55:12 +08:00
为什么不用C++呢?
& & 15:50:23 +08:00 via iPhone
没必要,这些都可以 infer 出来。
此外,楼主很在意类型安全的话,可以来用用 Haskell,及其独有 TDD,我是说 Type Driven Development。除了 dependent type,Haskell 还有 refinement type checker,比如说在函数签名上可以直接标记接受所有大于零的整数,编译器就能给你检查出所有可能有问题的调用——对处理用户输入特别有帮助哦。
& & 16:34:36 +08:00 via Android
@ 7支持强类型,而且可以在php.ini设置必须使用强类型
& & 17:53:38 +08:00
int $param_1 = 1;
string $param_2 = &hello world&;
如果要这样写,你直接找个强类型语言用算了
& & 17:56:34 +08:00
形参中声明类型很早就支持了.我觉得主要是方便ide智能提示...
鸟哥不是说php7配置文件中支持开启变量强类型了么
& & 18:10:42 +08:00
支持强类型+1
& & 18:27:38 +08:00
楼主是要弄死java?
& & 21:59:17 +08:00
这个东西……它好像叫向量标注?(逃
& · & 1040 人在线 & 最高记录 1893 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.7.3 · 61ms · UTC 07:49 · PVG 15:49 · LAX 00:49 · JFK 03:49? Do have faith in what you're doing.&!-- t018.php:局部变量和全局变量--&&html& &head&
&title&局部变量和全局变量&/title& &/head& &body&
&?php $var1=6; echo &定义局部变量/$var=&.$var1; include(&a.php&); function myfun1(){
global $var1;//此处注意
echo &&br&在myfun1()函数中输出局部变量&;
echo &/$var1=&.$var1; } myfun1(); function myfun2(){
echo &&br&在myfun2()函数中输出局部变量&;
echo &/$var1=&.$GLOBALS[&var1&]; } myfun2(); global $var2; $var2=8; function myfun3(){
global $var3;
echo &&br&在myfun3()函数中输出全局变量&;
echo &/$var2=&.$var2;//不能访问
echo &/$var3=&.$var3; } myfun3(); echo &&br&在函数外输出全局变量&; echo &/$var2=&.$var2; echo &/$var3=&.$var3;
?& &/body&&/html&&!-- a.php:t018.php所包含的文件--&&html& &head&   &title&t018.php所包含的文件&/title& &/head& &body&   &?php echo &&br&在a.php中输出/$var的值&; echo &/$var1=&.$var1; echo &&br&在a.php的函数中输出/$var的值&; function myfun4(){   echo &/$var1=&.$var1; }   ?& &/body&&/html& &p&/*当用户在php中调用一个函数或者类的方法时,内核会创建一个新的符号表并激活之,这也是为什么我们无法在函数中使用函数外定义的变量的原因(因为他们分属两个符号表,一个当前作用域,一个全局作用域的),如果不是在一个函数里,则全局作用域的符号表处于激活状态。/*&/p&&!-- a.php:t018.php所包含的文件--&&html& &head&
&title&t018.php所包含的文件&/title& &/head& &body&
&?php echo &&br&在a.php中输出/$var的值&; echo &/$var1=&.$var1; echo &&br&在a.php的函数中输出/$var的值&; function myfun4(){
echo &/$var1=&.$var1; }
?& &/body&&/html&&&PHP函数中变量的说明
PHP的变量的范围
局部变量: 在函数中声明的变量就是局部变量,只能在自己的函数内部使用。
全局变量:
在函数外声明,在变量声明以后的,直到整个脚本结束前都可以使用,包括在函数中和{}中都可使用
PHP的变量分不出 是声明还是使用,
不管是声明还是使用都是一种形式,所以函数中要使用外部的变量就要使用global来确定函数中是使用外部的全局变量,而不是声明。
php 常量默认就是全局的,常量只能定义一次,而且不可以改变。
而javascript 声明变量使用关键字 var name= 'hyr';
如果在函数中不声明 就直接用全局的)
-------------------------------------------------------------------------------------------------
不使用global关键词 ,函数内 $a 是局部变量 ,全局的$a = 10
&&$a = 10;
&&function test()
&&test();// 局部变量 20
&&echo $a;//全局变量 10
函数内 使用 global关键字 声明$a 就是外部全局的$a 变量 ,
函数内global关键字声明的同时不能同时赋值
&&$a = 10;
&&function test()
$a;//声明$a是外部的全局变量$a的同时不能赋值,赋值可以另外起一行赋值,如下行
= 20;//声明函数里使用的 $a 变量是来自 函数外部 声明的全局变量$a
&&test();//&结果为
&&echo $a;// 结果也是 20
在PHP中使用全局变量
要通过global关键字将这个全局变量包括到函数中才能使用到,在global声明之后才是使用全局的变量
参数就是局部变量,这个局部变量可以调用 时去赋值。
PHP的静态变量
静态变量只能声明在函数中(类中),不能在全局声明
使用static在变量前;
作用:一个变量可以在同一个函数在多次调用中同用。
1. 静态变量在静态代码段中保存
2. 一个函数多次调用之间共用,但只在第一次调用 函数时声明到内存,以后再调用用,就不再声明,而直接使用
变量函数:如果一个变量后面有括号$var=hello&
$var(), 就将寻找与变量值同名的函数 hello();
1. 函数的功能————决定是否使用这个函数
2. 函数的参数————决定函数怎么调用 —有几个参,传什么类型的值,。。。。
3. 函数的返回值———-调用后怎么处理这个函数
PHP给2000多个函数。。。 都属于系统涵数,都可以通过名称直接使用。
一定要先使用系统函数,如果系统函数没有你想要的功能,再去自己定义函数
1. 常规函数
bool copy ( string source, string dest )
2. 带有mixed , mixed表示可以传任何类型的数据
bool chown ( string filename, mixed user )
3. 带有&参数的函数, 表示引用赋值,
这个参数不能传值,只能传一个变量,然后函数将变量的值改变,我们在使用这个变量时,值也是变化的
bool arsort ( array &array [, int sort_flags]
4.默认函数 带有[]的函数, 表示这个参数是可选的,如果你传值了就使用你传的值,如果没有传值则使用默认值
直接在声明函数时,就为参数给初值。
可选值和必须值, 必须从后向前设置
bool arsort ( array &array [, int sort_flags]
5. 带有…的参数函数, …表示可以传任意多个参数
int array_unshift ( array &array, mixed var [,
mixed ...] )
6. 回调函数 带有callback,&
就是调用这个函数时需要我们传一个函数进来(函数名,函数名字串)
array array_filter ( array input [, callback callback] )
内部函数:
PHP可以在函数内部再声明函数
就是用来帮助外部函数完成一些子功能的。
就是在自己内部调用自己的函数名
重用函数(使用自己定义的函数库)
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 oracle 函数定义变量 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信