繁体   English   中英

在PHP中,如何在类中包含过程代码?

[英]In PHP, how can I wrap procedural code in a class?

我有一大块遗留的PHP代码,我需要与之接口,如下所示:

//legacy.php

function foo() {
}

function bar() {
}

我希望能够将这些遗留函数包装在类或某种方式require_once中,而不会污染该全局命名空间或更改原始文件。

您可以在类中使用命名空间或静态方法:

// original file: foo.php
class Foo
{
  public static function foo() { }
  public static function bar() { }
}

// new file:
require 'foo.php';

class MyNewClass
{
  public function myfunc()
  {
    Foo::foo();
  }
}

$x = new MyNewClass();
$x->myfunc();

两者都需要对文件稍作修改。 例如,使用上面的示例(带有静态方法的类bar() ,必须将对bar()调用更改为Foo::bar() )。

或者,使用命名空间:

namespace foo;

use \Exception;
// any other global classes

function foo() { }
function bar() { }

在您的文件中:

require 'foo.php';

foo\foo();
foo\bar();

正如评论中所提到的,我认真地建议将此视为重构范围的机会。

但假设您无论出于何种原因无法做到这一点,您问题的答案取决于原始legacy.php文件中的函数是否在内部相互调用。

如果没有,那么是的,做这样的事情是相当微不足道的:

<?php
class legacyFunctions {
require_once('legacy.php');
}
?>

但请注意,这只是将它们设置为类中的公共函数,而不是静态函数,因此为了调用它们,您必须首先实例化该类的实例,可能在代码的早期实例化为全局(它将是单身人士类的经典例子。

如果您使用的是PHP5.3,您可能需要考虑使用PHP命名空间而不是类,这样可以解决必须实例化类的问题。 但机制将大致相同。

但是,如果您的函数在遗留的PHP代码中相互调用,那么如果没有对遗留代码进行至少一些编辑以将函数调用更改为新版本,则这些都不可能实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM