标签:
从第一次接触WordPress开始,在前台首页需要调用文章中的图片以实现在首页显示图片文章,就看到网络上流传甚广的一个函数:
1 function catch_that_image() { 2 global $post, $posts; 3 $first_img = ‘‘; 4 ob_start(); 5 ob_end_clean(); 6 $output = preg_match_all(‘/<img.+src=[\‘"]([^\‘"]+)[\‘"].*>/i‘, $post->post_content, $matches); 7 $first_img = $matches [1][0]; 8 9 if(empty($first_img)){ 10 $first_img = "/default.jpg"; 11 } 12 return $first_img; 13 }
毫无疑问,这个函数是可以正常工作的。但是你知道这个函数会抛出错误吗?当文章没有图片,并且PHP和WordPress开启调试模式时会抛出一个错误:”Undefined offset: 0 in ……“
作为一个要求完美的人,当然不希望自己的代码中有任何错误,因此简单分析解决之。
分析一下这个函数,出错的原因在于文章没有图片时 $matches 将是个空的数组,而
$first_img = $matches[1][0];
这一句将一个空数组的某个元素赋值给另一个变量,当然就出现错误了。由于PHP并不总是以抛出错误来解决问题,因此在出错后 $first_img 并没有被赋值,因此后面的代码都没有问题。
明白了这一点,解决起来就很简单了,直接去判断数组 $matches 是否为空即可。
我是这样处理的:
$first_img = ‘‘; if(empty($matches[1])) $first_img = "/default.jpg"; else $first_img = $matches [1][0]; return $first_img;
也就是,在不明确 $matches是否为空的情况下,不急于去为 $first_img 赋值。后面的 if 直接去判断 $matches[1]是否为空。
这样就避免了一个潜在的错误。
完整的修改方案如下:
1 //获取文章的第一张图片地址 2 function catch_that_image() { 3 global $post, $posts; 4 $first_img = ‘‘; 5 ob_start(); 6 ob_end_clean(); 7 $output = preg_match_all(‘/<img.+src=[\‘"]([^\‘"]+)[\‘"].*>/i‘, $post->post_content, $matches); 8 9 $first_img = ‘‘; 10 if(empty($matches[1])) $first_img = "/default.jpg"; 11 else $first_img = $matches [1][0]; 12 return $matches[1]; 13 }
标签:
原文地址:http://www.cnblogs.com/ztkdv/p/4924708.html