0

假设我在 PHP 中有这个函数

<?php
function get_filename_parts($fname){
/*
receives a filename and returns an array with the filename & extension
example:
receives:   myfile1.jpg
returns:    array('filename' => 'myfile1', 'extension' => 'jpg')

receives:   myfile1.blah.blah.jpg
returns:    array('filename' => 'myfile1.blah.blah', 'extension' => 'jpg')

*/
$name_no_ext = explode('.',$fname);
$ext = array_pop($name_no_ext);
$name_no_ext = implode('.',$name_no_ext);

$retval = array('filename' => $name_no_ext, 'extension' => $ext);

return $retval;
}
?>

是否有一些语法可以在单个语句中执行类似的操作:

 <?php echo get_filename_parts('test.txt')->filename; ?>

代替:

 <?php $fname = get_filename_parts('test.txt'); echo $fname['filename']; ?>

谢谢!

4

5 回答 5

3

在 PHP 5.4 中,您可以进行速记:

$fname = get_filename_parts('test.txt')['filename'];

于 2013-07-02T14:04:36.097 回答
1

从 php 5.4 版开始,您可以使用

$fname = get_filename_parts('test.txt')['filename'];
于 2013-07-02T14:04:04.877 回答
1

对于 PHP < 5.4,您可以编写此函数:

function array_var($from, $name, $default = null) {
    if(is_array($from)) {
      return array_key_exists($name, $from) ? $from[$name] : $default;
    } 

    return $default;
} 

然后你可以写

array_var(get_filename_parts('test.txt'), 'filename');
于 2013-07-02T14:07:11.997 回答
1

如果您使用的是 PHP < 5.4,那么您可以使用 StdClass 来模拟您的结果:

例子:

function func() {
  $results = new StdClass;

  $results->filename = 'file_name';
  $results->extension = 'extension';

  return $results;
}

echo func()->filename;
于 2013-07-02T14:11:01.083 回答
1

试试这个:

function get_filename_parts($fname){
    $parts = explode('.', $fname);
    $obj = new StdClass;
    $obj->extension = array_pop($parts);
    $obj->filename = implode('.', $parts);
    return $obj;
}

现在您可以按照自己的方式使用它:

<?php echo get_filename_parts('test.txt')->filename; ?>
<?php echo get_filename_parts('test.txt')->extension; ?>
于 2013-07-02T14:16:01.740 回答