【问题标题】:Two times the same 6 lines of code两次相同的 6 行代码
【发布时间】:2015-04-05 23:30:34
【问题描述】:

我的 PHP 代码中有两次相同的 5 行代码:

do_something1();
$myvar1 = something1();
do_something_else2();
$myvar2 = something2();
do_something_else3();
$myvar3 = something3();

// another code
// ...
// another code

do_something1();
$myvar1 = something1();
do_something_else2();
$myvar2 = something2();
do_something_else3();
$myvar3 = something3();

这样的人能避免重复吗?

@BEGINNING BLAH
do_something1();
$myvar1 = something1();
do_something_else2();
$myvar2 = something2();
do_something_else3();
$myvar3 = something3();
@END BLAH

// another code
// ...
// another code

@INSERT BLAH

当然,我可以定义一个新的function,但是在这里,我必须定义global 变量(我应该在使用global 调用函数本身之前预先定义变量吗?)等等。

这就是为什么我一直在寻找在这种情况下是否存在比 function 更短的东西,例如预处理器复制/粘贴。

【问题讨论】:

  • 我认为您必须向我们展示您的真实代码才能告诉您如何优化它
  • @Rizier123 这里是需要调用两次的代码:pastebin.com/ERVmMsWZ。此代码导出 $pageheader、$pagecontent、$pagetitle 和 $linkurl。
  • 所以你的问题是返回变量?
  • @Rizier123 不是真的:我的问题(这不是一个真正的问题)是要知道除了函数之外是否还有其他东西可以做到这一点......
  • 那么我认为除了将它包装在一个函数中并通过引用使用或返回变量之外别无他法。 PHP 不是魔法

标签: php function scope


【解决方案1】:

可能有很多可接受的解决方案,但只有一个:

// Here is the function doing the repetitive work
function blah(){
    do_something1();
    $myvar1 = something1();
    do_something_else2();;
    $myvar2 = something2();
    do_something_else3();
    $myvar3 = something3();
    return array($myvar1,$myvar2,$myvar3);
}

// Now for the usage matching your above case

list($myvar1,$myvar2,$myvar3) = blah();    

// another code
// ...
// another code

list($myvar1,$myvar2,$myvar3) = blah(); 

List 可以是一个非常有用的 php 函数 - http://php.net/manual/en/function.list.php

【讨论】:

  • 当然,我可以定义一个新函数,但是在这里,我必须定义全局变量 我认为 OP 正在做一些他没有在这里向我们展示的东西!
  • @Rizier123 我认为他的意思是使用 global,因为他不知道分配 3 个变量只返回一个函数,这是通过 list here 实现的 :)
  • ^ 如果你是对的,那将是一个很好的猜测! (我仍然猜想 OP 有他没有向我们展示的代码,这与这里的有点不同)
  • @b.enoit.be 是的,我不知道该怎么做 :) 顺便说一下,这里是需要调用两次的代码:pastebin.com/ERVmMsWZ。此代码导出 $pageheader、$pagecontent、$pagetitle 和 $linkurl。
  • 是的,但我想知道是否可以避免写function,只是想知道在 PHP 世界中是否有一些我以前从未去过的神奇地方:)
【解决方案2】:

这样的?只需将您的代码放在 $var1 所在的位置,然后将 for 行中间的数字更改为您希望它执行的迭代次数。

for ($i=1; $i<=2; $i++) {

$var1 = "";

}

【讨论】:

  • 不不,不是这个。中间有一段代码见// another code,调用同一个代码的两个地方相距甚远。
  • 然后编写一个可以在这两个地方调用的函数,或者将代码放在另一个文件中并将其包含在这两个地方。两种方法都可以。
猜你喜欢
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多