【发布时间】:2014-11-18 23:55:48
【问题描述】:
我是 PHP 新手,并且已经在 Perl/C/Scheme 方面有一些经验,我觉得我很困扰我 不知道如何在 if/for/while 等块内定义变量,并使其在块外不可见。
我是否必须将代码块内的代码放入函数中才能使其成为本地代码?
例如,我的很多错误都是由这样的代码引起的:
<?php
for($id = 0; $id<10; $id++)
{
$a = $id;
}
if(1)
{
$b = 3;
}
echo $a;//9
echo $id;//10;
echo $b;//3
?>
但是,我 perl,这样的代码是安全的:
#!/usr/bin/perl
use 5.014;
use strict;
use warnings;
for(my $id = 0; $id < 10; $id++)
{
my $a = $id;
}
if(1)
{
my $b = 3;
}
#say $a; #error
#say $b; #error
#say $id; #error
在 C 中,这样的代码会导致错误(使用 -std=gnu99 编译)
#include<stdio.h>
int main()
{
for(int i=0; i<10; i++)
{
int a = i;
}
if(1)
{
int b = 3;
}
//printf("%d\n",i);//err
//printf("%d\n",a);//err
//printf("%d\n",b);//err
return 0;
}
那么,由于 PHP 缺少块作用域,我该如何避免错误呢?
【问题讨论】:
-
将你的块切割成函数,让它有一个范围?你能做的最好的就是使用一些解决方法
-
通过改变您编码时的思维方式:PHP !== Perl && PHP !== C
-
通过保持你的函数,从而你的范围很小,而不是在你的范围内为不同的目的重用变量名,并在范围的顶部初始化你的变量。
-
如果您的范围太大以至于您必须搜索多个不同的文件,那么您的范围就太大了。
-
如果你写的是长的程序脚本,那你就有问题了,要么把它分解成更小的函数,要么遵循 OOP 方法,你不会有这个问题
标签: php