PHP速度/内存-传递数组与传递对象

PHP速度/内存-传递数组与传递对象,php,optimization,parameters,Php,Optimization,Parameters,我正在查看一位同事的代码,发现了一些我认为低效和浪费的东西 基本上他有这样一个功能: function blah($record) { echo "do something " . $record['first_name'] . $record['last_name']; } function blah($first_name, $last_name) { echo "Do something " . $first_name . $last_name; } 他将整个数组传递给

我正在查看一位同事的代码,发现了一些我认为低效和浪费的东西

基本上他有这样一个功能:

function blah($record) {
    echo "do something " . $record['first_name'] . $record['last_name'];
}
function blah($first_name, $last_name) {
    echo "Do something " . $first_name . $last_name;
}
他将整个数组传递给这个函数,而没有大约30多条记录

在函数内部,他只使用了
$record['first\u name']
$record['last\u name']
,因此所有其他属性都是无意义的

我的论点是。这样重写不是更好吗:

function blah($record) {
    echo "do something " . $record['first_name'] . $record['last_name'];
}
function blah($first_name, $last_name) {
    echo "Do something " . $first_name . $last_name;
}
然后只需使用参数,而不是在函数期间访问数组


这是准确的观察结果吗?在这个实例中,php会不必要地复制内存吗?还是我太迂腐了

只需将数组传递给函数,就不会在内存中复制任何内容。任何地方都没有性能损失。重写函数签名以使其更明确可能仍然是一个好主意,但这是有争议的,如果没有更多的上下文就无法判断

为了得到一个明确的答案,你需要分析代码。期望发现这几乎没有什么区别。这种微优化很少有用,而且通常在编码和测试上浪费的时间比在改进性能后恢复的时间还要多。这难道不意味着所有内容都是通过引用编辑的吗?这只是个人观点,但是(除非函数调用9999999次)改进大约需要几毫秒。此外,函数可能会在将来的某个时候使用更多的数组,并传递2个变量,然后再添加一个参数可能会很麻烦。所以是的,这可能是一种改进,但在这种特殊情况下,我会选择过度迂腐。酷,是的,优化在代码库中很重要。而且它不太可能改变过去的名字和姓氏。如果没有内存被复制到任何地方,那不是意味着所有php函数参数都是通过引用传递的吗?当然,一定有一个memcopy在某个点上。PHP使用copy-on-write。只有在修改数据时才会复制数据。只要你只是从一个值中读取,它就不需要被复制,也不是。啊,好吧,所以当他调用$record['first_name']时,它会进行复制。因此,我认为唯一的优化是php必须保留数组中所有其他键的一些微小引用,以防在写入数据时复制?基本上,PHP会记住,如果数组被写入,它必须复制数组结构(注意:甚至不一定是其中的数据)。