我知道这实际上不是逆向工程
我有这个功能:
<?=$this->get('translator')->trans('dashboard.actions', array(), 'front');?>
我想了解如何插入一个函数(使用include maybe),当使用该代码时调用。
我知道函数名需要是trans,它有3个参数,但如何定义它?让我用一种更简单的方式来表达:在php脚本中,当使用$this->get('translator')->trans('dashboard.actions', array(), 'front');
这只是一个普通的类方法:
class Traslator{
public function trans($a, $b, $c){
return 'Hello world';
}
}
现在,您只需要另一个名为get()
的类方法,它返回前一个类的实例:
class Foo{
public function get(){
return new Traslator;
}
}
完整代码:
<?php
class Traslator{
public function trans($a, $b, $c){
return 'Hello world';
}
}
class Foo{
public function get(){
return new Traslator;
}
public function test(){
?>
<?=$this->get('translator')->trans('dashboard.actions', array(), 'front');?>
<?php
}
}
$f = new Foo;
$f->test();
$this
引用当前对象实例,该变量不能被重新赋值。也就是说,要欺骗PHP做你想做的事情,需要在之前和之后添加代码。
通过创建单个类,可以获得结果。
<?=...
行前
<?php
class C {
function get($s) {
return $this;
}
function trans($s, $a, $f) {
return 'Hello world';
}
function hw() {
?>
然后是
<?=$this->get('translator')->trans('dashboard.actions', array(), 'front');?>
然后需要结束类,并调用做你想做的事情的方法
<?php
}}
$i = new C();
$i->hw();
将这3块代码放到一个文件中并调用PHP, <?=...
行应该显示"Hello world"
$this->get('translator')
返回类的实例,让它称为"Translator" -在该实例中,您调用trans()
方法
所以你想将"Translator"的实例更改为扩展版本
class ExtTranslator extends Translator{
public function trans($params){
echo 'fdsfds'; // here you could add what you like
return parent::trans($params);
}
}
,是的,这很难帮助你,因为我真的不知道你在做什么,要使用这些代码,你必须首先理解它。