tinydream 发布的文章

现在接手的一个项目中用到了jqprint插件,用来打印form表单中的内容。
但是使用中发现一个很奇怪的现象,就是input、textarea标签里的东西无法打印,经过百度查找原因,只解决了input的打印问题,而textarea还是依旧。

后查看多篇文章发现:jqprint打印方式是把打印区域的html内容处理到新的iframe中,然后打印。这样的一个机制下,input、textarea当中的内容如果是通过jq赋值、手动输入,那么在打印的时候是不会有内容的。

解决的办法如下:
1.input属性赋值:使input标签的value属性内有你要打印的内容。
2.textarea: 将标签内的内容,赋给textarea的html。
经过上述处理,在打印预览以及打印的时候,都会有内容了。

Java与其他的一些高级语言中,都有方法重载的实现机制
例如Java:

public class Main {

public static void main(String[] args) {
    Main _main = new Main();
    _main.show();
    _main.show(20);
    _main.show("微梦", 20);
}

public void show(){
    System.out.println("没有参数的show方法");
}
public void show( int age) {
    System.out.println("你的年龄是:" + age);
}
public void show( String name, int age ) {
    System.out.println(name + "的年龄是:" + age );
}
}

运行结果:

没有参数的show方法
你的年龄是:20
微梦的年龄是:20

以上代码是Java语言的代码。Java提供了这样的方法重载,根据不同的需要,调用不同参数个数(类型)的方法,就能获得、输出不同的结果。那么PHP怎么实现呢?

由于PHP是弱类型语言,因此函数的输入参数类型无法确定(可以使用类型暗示,但是类型暗示无法用在诸如整型,字符串之类的标量类型上),并且对于一个函数,比如只定义了3个输入参数,PHP却运行调用的时候输入4个或者更多的参数。因此基于这2点,注定了PHP中无法重载函数,(类似Javascript语言),也无法有构造函数的重载。
由于实现函数的重载对提高开发效率很有帮助,如果能象C#或者C++那样,那就非常好了。事实上,PHP的提供了一个魔术方法,mixed __call ( string name, array arguments )。这个方法在php手册中也有提及,根据官方文档,称此方法可以实现函数重载。当调用对象中一个不存在的方法的时候,如果定义了__call()方法,则会调用该方法。
如下代码:

class A
{
   function __call ( $name, $arguments )
    {
        echo "__call调用<br/>";
        echo '$name为'.$name."<br/>";
        print_r ($arguments);
    }
}
(new A)->test("test","argument");
?>

运行的结果就是:
__call调用
$name为test
Array ( [0] => test [1] => argument )
因此只需要利用该魔术方法既可以实现函数重载。
则实现代码如下:

<?php
class t
{
    public function __call( $name, $param ){
        $name .= count( $param );
        $class = new ReflectionMethod( __CLASS__ , $name );
        $class->invokeArgs( $this, $param ) ;

        // return $this->$name( $param );
    }
    public function show0(){
        echo 'show方法被调用<br>';
    }
    public function show1( $param ){
        echo '你的名字是:', $param , '<br>';
    }
    public function show2( $param1, $param2 ){
        echo $param1, ' ', $param2, '<br>';
    }
}

$s = new t();
$s->show();
$s->show('微梦');
$s->show('hello','world');
?>

运行结果如下:
show方法被调用
你的名字是:微梦
hello world

以上实现过程是使用了PHP提供的反射机制里的一些方法去实现的。兴许还有别的实现方法,我暂时没有去思考过,更别提去寻找和尝试了。所以如果看官有什么好的方法或者建议,就请提出来。让小弟也学习一二,不胜感激。

一直有打算自己写博客系统,但是一直没有开始实施。
之前的一切,都从此刻结束,TinyBlog现在开始做开发了。
代码一个个的字符敲出来,看着屏幕上的字符一点点的增多,内心是平静的。因为我需要冷静的思考我的BLOG要做成什么样的。不能是头脑一热,随便写一个出来就是了的。一点点的整理,一点点的实现,一点点的完善。。。
自己的孩子,需要用心去照顾。走偏了需要为它矫正。
不多说了,造(编写)孩子去了。