如何在php中创建生成链接的函数?

如何在php中创建生成链接的函数?,php,Php,我想要的是创建一个函数,该函数可以自动生成带有或不带数组参数的链接。我已经创建了一个函数来生成链接,但我不知道如何使用参数生成链接 $path = array( 'HOME_PATH' => '/home', 'PROFILE_PATH' => '/profile/$id', 'POST_PATH' => '/post/$id/$slug', ); generateLink($path); fun

我想要的是创建一个函数,该函数可以自动生成带有或不带数组参数的链接。我已经创建了一个函数来生成链接,但我不知道如何使用参数生成链接

  $path = array(
         'HOME_PATH' => '/home',
         'PROFILE_PATH' => '/profile/$id',
          'POST_PATH' => '/post/$id/$slug',
        );

 generateLink($path);

function generateLink($path) {
    foreach( $path as $constant => $path )
    {
        if(!defined( strtoupper($constant) ) )
        {
            define( strtoupper($constant), 'localhost/blog' . $path);
        }
    }
}
Html


另一种方法是将
vsprintf
与数组参数一起使用

因此,首先使用
路径设置定义的格式:

$path = array(
    'HOME_PATH' => '/home/',
    'PROFILE_PATH' => '/profile/%s',
    'POST_PATH' => '/post/%s/%s',
);
然后使用id和slug的数组参数在循环上应用
vsprintf

function generateLink($args) { // <feed an array>
    $path = array(
        'HOME_PATH' => '/home/',
        'PROFILE_PATH' => '/profile/%s',
        'POST_PATH' => '/post/%s/%s',
    );
    foreach ($path as $constant => $uri) {
        $constant = strtoupper($constant);
        if (!defined($constant)) {
            define($constant, 'localhost/blog' . vsprintf($uri, $args));
        }
    } 
}

generateLink([$id, $slug]); // use the function to generate the definitions
// just make sure the arguments are defined before invoke the function
函数generateLink($args){//
$path=array(
“主路径”=>“/HOME/”,
'PROFILE_PATH'=>'/PROFILE/%s',
'POST_PATH'=>'/POST/%s/%s',
);
foreach($constant=>$uri的路径){
$constant=strtoupper($constant);
如果(!已定义($constant)){
定义($constant,'localhost/blog'.vsprintf($uri,$args));
}
} 
}
generateLink([$id,$slug]);//使用函数生成定义
//只需确保在调用函数之前定义了参数
然后像通常一样使用这些定义:

<a href="<?php echo HOME_PATH; ?>">Home Page</a>
<a href="<?php echo POST_PATH; ?>">Post Details</a>
<a href="<?php echo PROFILE_PATH; ?>">Profile</a>


旁注:另一种变体是使用
generateLink($id,$slug)
func\u get\u args()
。但是,您仍然可以获得一个数组并在
vsprintf

中使用它,但是我如何在html中向PROFILE_PATH传递参数呢?@bdroid您不需要这样做,因为它已经是函数的一部分,除非您有特定的原因说明为什么需要在外部定义它,您可以在外部定义它,
vsprintf
的概念应该是相同的
<a href="<?php echo HOME_PATH; ?>">Home Page</a>
<a href="<?php echo POST_PATH; ?>">Post Details</a>
<a href="<?php echo PROFILE_PATH; ?>">Profile</a>