每个人都遇到语法错误.即使是有经验的程序员也会犯错误.对于新手来说,这只是学习过程的一部分.但是,通常很容易解释错误消息,例如:
PHP Parse错误:语法错误,第20行的index.php中出现意外的'{'
意想不到的符号并不总是真正的罪魁祸首.但是行号给出了从哪里开始寻找的粗略想法.
始终查看代码上下文.语法错误往往隐藏在提及或在前面的代码行.将您的代码与手册中的语法示例进行比较.
虽然不是每个案例都匹配另一个案例 然而,有一些常规步骤可以解决语法错误.这篇文章总结了常见的陷阱:
意外的T_FUNCTION ......
意外T_IF
意外T_FOREACH
意外T_FOR
意外T_WHILE
意外T_DO
意外T_PRINT
意外T_ECHO
意外的T_INLINE_HTML ......
意外的T_PAAMAYIM_NEKUDOTAYIM ......
意外的T_OBJECT_OPERATOR ......
意外的T_DOUBLE_ARROW ......
意想不到的T_SL ......
意外的T_BOOLEAN_OR ...
意外的T_BOOLEAN_AND ......
意外的T_NS_SEPARATOR ......
在php中,我经常需要使用数组来映射变量......但我似乎无法在一个内联中执行此操作.cf示例:
// the following results in an error:
echo array('a','b','c')[$key];
// this works, using an unnecessary variable:
$variable = array('a','b','c');
echo $variable[$key];
Run Code Online (Sandbox Code Playgroud)
这是一个小问题,但它每隔一段时间就会不停地窃听......我不喜欢这样一个事实:我没有使用变量;)
可能重复:
用于解除引用功能结果的PHP语法
我有一个字符串,看起来像1234#5678.现在我称之为:
$last = explode("#", "1234#5678")[1]
Run Code Online (Sandbox Code Playgroud)
它不起作用,有一些语法错误......但在哪里?我期待的是5678 in $last.这不适用于PHP吗?
我的脚本在我的xampp上运行得非常好.现在我尝试将其上传到服务器上,但它直接吐了一个
解析错误:语法错误,意外'['
在我的脸上.:(
它嘲弄的线是这一行:
$item = $xml->xpath($path)[0];
Run Code Online (Sandbox Code Playgroud)
我不知道出了什么问题.我试着看看php 5.3更新日志,但没有找到任何关于它.(因为我在服务器上有5.3,而在xampp上有一个较旧的版本)
整个代码块看起来像这样:
$path = '//item[@id="'.$id.'"]';
if ($xml->xpath($path)) {
$item = $xml->xpath($path)[0];
} else {
die('<p class="error">Script Error: Code 101 - Please contact administrator</p>');
}
Run Code Online (Sandbox Code Playgroud)
我感谢任何帮助,我无法与谷歌联系并且不知道它可能来自哪里,因为在xampp它的工作正常
我在探讨PHP的构建机制,并在将数组作为对象进行投射时遇到了一个奇怪的情况
$o = (object) array('1'=>'/foo/bar');
$o = new stdClass();
var_dump($o);
Run Code Online (Sandbox Code Playgroud)
据我了解,PHP属性需要使用与PHP变量相同的规则声明.这是一个有效的变量名称,以字母或下划线开头,后跟任意数量的字母,数字或下划线.但是,上面的代码产生以下输出
object(stdClass)#1 (1) {
[1]=>
string(8) "/foo/bar"
}
Run Code Online (Sandbox Code Playgroud)
当你试图访问对象中的信息时,它变得非常奇怪.
var_dump($o->1); // parse error
var_dump($o->{'1'}); // NULL
var_dump(get_object_vars($o)); //array(0) { }
Run Code Online (Sandbox Code Playgroud)
无论如何都要获取var_dump报告的信息在对象中,或者它是否仅在请求生命周期的其余部分被锁定?(实际使用这是零,我只是好奇)
我有这个行代码
$media = $dc->thumbnail->attributes()['url'];
Run Code Online (Sandbox Code Playgroud)
在我的本地(WAMP)php 5.4.3上运行正常但是当我在我的服务器cpanel上托管它然后它给出了这个错误
Parse error: syntax error, unexpected '[', expecting ')'
Run Code Online (Sandbox Code Playgroud)
我服务器上的php版本是5.2.17
我看到它有任何问题,请帮忙
好的,所以我有一个表单,它在POST数组中发送数组.我试着这样读:
$day = $this->input->post("days")[0];
Run Code Online (Sandbox Code Playgroud)
这不起作用.PHP说"意外"['".为什么这不起作用?
我通过这样做来修复它:
$days = $this->input->post("days");
$day = $days[0];
Run Code Online (Sandbox Code Playgroud)
我解决了我的问题,我只是好奇为什么第一种方法不起作用.
function array_test()
{
return array(0, 1, 2);
}
echo array_test()[0];
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释为什么这段代码不起作用?
下面是对一个大数组的php foreach循环的测试,我认为如果$v不改变,真正的副本不会因为写入时的副本而发生,但为什么它通过引用传递时速度快?
代码1:
function test1($a){
$c = 0;
foreach($a as $v){ if($v=='xxxxx') ++$c; }
}
function test2(&$a){
$c = 0;
foreach($a as $v){ if($v=='xxxxx') ++$c; }
}
$x = array_fill(0, 100000, 'xxxxx');
$begin = microtime(true);
test1($x);
$end1 = microtime(true);
test2($x);
$end2 = microtime(true);
echo $end1 - $begin . "\n"; //0.03320002555847
echo $end2 - $end1; //0.02147388458252
Run Code Online (Sandbox Code Playgroud)
但这一次,使用pass by reference很慢.
代码2:
function test1($a){
$cnt = count($a); $c = 0;
for($i=0; $i<$cnt; ++$i)
if($a[$i]=='xxxxx') ++$c;
}
function …Run Code Online (Sandbox Code Playgroud) 反正有没有临时变量直接访问数组中返回的数据?
目前,我的代码如下:
function getData($id) {
// mysql query
return mysql_fetch_array($result);
}
$data = getData($id);
echo $data['name'];
Run Code Online (Sandbox Code Playgroud)
是否有直接的方法来获取没有临时变量的返回数据?
php ×10
arrays ×4
syntax-error ×2
casting ×1
codeigniter ×1
coding-style ×1
debugging ×1
explode ×1
foreach ×1
function ×1
parse-error ×1
parsing ×1
php-5.2 ×1
php-5.3 ×1
return ×1
string ×1
variables ×1