You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP字符串截断函数重声明错误排查与解决求助

问题原因

你这段代码应该是在循环处理多篇文章时被重复执行了,PHP不允许同一个函数被多次声明,所以每处理第二篇及以后的文章时,就会触发Cannot redeclare truncateString()的致命错误。

解决办法

方法一:检查函数是否存在再声明

在定义函数前增加判断,只有函数未被定义时才执行声明逻辑,避免重复定义:

// 先判断函数是否已存在,不存在才定义
if (!function_exists('truncateString')) {
    function truncateString($string, $length, $ellipsis = '...') {
        if (strlen($string) <= $length) {
            return $string;
        }

        $truncatedString = substr($string, 0, $length);
        $lastSpace = strrpos($truncatedString, ' ');

        if ($lastSpace !== false) {
            $truncatedString = substr($truncatedString, 0, $lastSpace);
        }

        return $truncatedString . $ellipsis;
    }
}

// 处理单篇文章的逻辑,循环中仅保留这部分
$string = $post['body'];
$truncatedText = truncateString($string, 200);
echo $truncatedText;

方法二:将函数移至全局公共文件(更推荐)

把truncateString()函数单独放在一个公共PHP文件中(比如common_functions.php),在页面初始化时仅引入一次该文件,后续处理文章时只需调用函数即可:

  1. 新建common_functions.php文件,仅存放函数:
function truncateString($string, $length, $ellipsis = '...') {
    if (strlen($string) <= $length) {
        return $string;
    }

    $truncatedString = substr($string, 0, $length);
    $lastSpace = strrpos($truncatedString, ' ');

    if ($lastSpace !== false) {
        $truncatedString = substr($truncatedString, 0, $lastSpace);
    }

    return $truncatedString . $ellipsis;
}
  1. 在博客页面中引入公共文件并循环处理文章:
// 仅引入一次公共函数文件
require_once 'common_functions.php';

// 循环处理所有博客文章
foreach ($all_posts as $post) {
    $string = $post['body'];
    $truncatedText = truncateString($string, 200);
    echo $truncatedText;
}

这样函数只会被定义一次,无论处理多少篇文章都不会触发重复声明的错误。

内容的提问来源于stack exchange,提问作者BlackPanther

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 09:32:35