2015-08-23 49 views
0

我有这样的代码:未初始化字符串偏移量:-1用花括号引用单个字符的字符串时

$len = strlen($string); 

if ($string{$len-1} == '-') { 
    // Do stuff... 
} 

但是我得到通知如下错误:

Uninitialized string offset: -1 

当我var_dump($len-1)值I得到:

int 3 

当我var_dump($string)我得到:

string 'bobo' (length=4) 

所以有谁能告诉我为什么这会引起一个NOTICE错误?

+0

[**无法重现你的错误**](HTTPS: //eval.in/420936)输出是什么:'var_dump($ string);'? – Rizier123

+0

@ Rizier123编辑。 – Brett

+1

看来'$ string'是空的,所以只是更新条件'if($ len> 1 && $ string {$ len-1} ==' - ')' –

回答

1

为了防止通知添加附加条件if声明:

$len = strlen($string); 

if ($len > 0 && $string{$len-1} == '-') 
    // Do stuff... 
} 

或使用substr功能:

if (substr($string, -1) == '-') { 
    // Do stuff... 
} 
+1

这不是一个错字,这是有效的PHP:http://php.net/manual/en/language.types.array.php – Rizier123

+0

@ Rizier123其实你可以用方括号得到一个字符串中的单个字符 –

+0

@ValeryViktorovsky是,但大括号也是有效的。我更喜欢他们,因为如果你引用一个数组或者不引起混淆。 – Brett

0
$len = strlen($string); 
if(isset($string{$len-1})){ 
if ($string{$len-1} == '-') { 
// Do stuff... 
} 
} 
+0

尽管这段代码可能会回答这个问题,但提供关于_how_和/或_why_的附加上下文可以解决问题,从而提高答案的长期价值。 –

相关问题