简单地说,让我通过一个例子来解释。
<?php
class My extends Thread {
public function run() {
/** ... **/
}
}
$my = new My();
var_dump($my->start());
?>
这是来自PHP手册。
我想知道是否有办法以更像Java的方式做到这一点。例如:
<?php
$my = new Thread(){
public function run() {
/** ... **/
}
};
var_dump($my->start());
?>
答案 0 :(得分:4)
或者,您可以使用PHP http://php.net/manual/en/migration70.new-features.php#migration70.new-features.anonymous-classes和http://php.net/manual/en/language.oop5.anonymous.php
中记录的PHP7匿名类功能答案 1 :(得分:4)
我知道这是一篇旧帖子,但我想指出PHP7 has introduced anonymous classes。
它看起来像这样:
$my = new class extends Thread
{
public function run()
{
/** ... **/
}
};
$my->start();
答案 2 :(得分:1)
或者您可以使用名称空间。
<?php
namespace MyName\MyProject;
class Thread {
public function run(){...}
}
?>
<?php
use MyName\MyProject;
$my = new Thread();
$my->run();
答案 3 :(得分:0)
你有访问ev(a | i)l。如果您使用特征来撰写课程,则可以这样做。
<?php
trait Constructor {
public function __construct() {
echo __METHOD__, PHP_EOL;
}
}
trait Runner {
public function run() {
echo __METHOD__, PHP_EOL;
}
}
trait Destructor {
public function __destruct() {
echo __METHOD__, PHP_EOL;
}
}
$className = 'Thread';
$traits = ['Constructor','Destructor','Runner',];
$class = sprintf('class %s { use %s; }', $className, implode(', ', $traits));
eval($class);
$thread = new $className;
$thread->run();
这输出......
Constructor::__construct
Runner::run
Destructor::__destruct
所以你可以,但不确定你是否应该。