① php如何动态调用静态方法 - 技术问答
[php]function example($className){? ???if (\"Database\" == $className) {? ?? ?? ???Database::staticFunc();? ???}}[/php]
② PHP 的类内如何使用动态函数名
PHP
中的
$$
符号可以实现,意思是正常的PHP变量前缀再加上$符号,就可以把原来的变量当作变量名。
例如:
<?php
//定义一个变量
$name
=
'';
//定义一个动态变量
$$name
=
'new';
echo
$$name;
echo
'<br>';
echo
$;
//上面的定义等同于下面的定义
$
=
'new';
echo
$;
?>
③ php如何调用同一个类里面的其他方法的变量
这个是无法直接调用的,如果想调用可以写入类的变量如下边的,这种用法是常用的
class name{
$aa="";
function a{
$b="ddd";
$this->aa=$b;
}
function b{
//这里引用$b赋予的类的变量
echo $this->aa;
}
}
④ 在php中如何设置类的属性,如何调用类的方法
PHP访问类的属性、方法使用箭头语法(->)。这里我给你一个例子供你参考:
<?php
classMyClass{//定义MyClass类
public$name;//定义了一个公有属性
protected$_age;//定义了一个保护属性
private$_email;//定义了一个私有属性
publicfunctionmy_method(){//定义my_method方法
}
protectedfunction_my_method2(){//定义_my_method2方法
}
}
$obj=newMyClass;//实例化
$obj->name='noname';//设置name属性
$obj->_age=12;//这是错误的,不能设置保护属性
$obj->address='KingStreet.'//设置一个未声明的属性是允许的,效果和公有属性类似,但未赋值前不能使用。
$obj->my_method()//调用公有方法
$obj->_my_method2();//这是错误的,不能调用保护方法
你需要理解继承、公有、保护和私有的概念。
继承:子类继承父类的公有、保护属性和方法。
公有:类的实例可以访问的属性和方法。
保护:只能在类的内部及其子类内部访问的属性和方法。
私有:只能在类的内部访问的属性和方法。
这是个很基础的问题,建议你多看书。
⑤ 如何在php类中执行某方法的时候自动执行另一个方法比如我执行数据插入的时候自动运行数据过滤的方法
PHP没有事件机制。有一些模拟事件的方法,但我觉得代码太繁琐了,不实用。这里我向你推荐PHP的魔术方法。
魔术方法会在调用一个不存在或是非公有的方法之前,自动根据某种规则调用另外一个方法。比如下面的类就是了这样:在调用insert方法时,判断类中是否有before_insert方法。如果有则先调用before_insert方法,并检查它的返回值,决定是否继续调用insert。如果before_insert是一个过滤函数,如果验证失败就会返回false,insert插入就不会进行了。
如果不明白可以阅读PHP手册中介绍魔术方法的部分。
<?php
classMyClass{
//如果使用类的实例调用$method,但$method方法不是公有的,就会触发此函数。
publicfunction__call($method,$args){
//检查是否存在方法$method
if(method_exists($this,$method)){
$before_method='before_'+$method;
//检查是否存在方法$before_method
if(method_exists($this,$before_method)){
//调用$before_method,检查其返回值,决定是否跳过函数执行
if(call_user_func_array(array($this,$before_method),$args)){
retruncall_user_func_array(array($this,$method),$args)
}
}else{
//$before_method不存在,直接执行函数
retruncall_user_func_array(array($this,$method),$args)
}
}else{
thrownewException('nosuchmethod'.$method);
}
}
//注意这里不要写成public
privatefunctioninsert(){}
//低调!不要写出公有的
privatefunctionbefore_insert(){}
}
$myobj=MyClass;
$myobj->insert('mytable',array('name'=>'2012'));
⑥ PHP 类怎么判断调用方法
给个例子 好好理解下吧 例:<?php
class A
{
function foo()
{
if (isset($this)) {
echo '$this is defined (';
echo get_class($this);
echo ")\n";
} else {
echo "\$this is not defined.\n";
}
}
}
class B
{
function bar()
{
A::foo();
//parent::foo();
}
}
$a = new A();
$a->foo();//动态调用,因为new了对象
A::foo();//静态调用,直接用类名去调用,没有new对象
$b = new B();
$b->bar();//在对象$b中,A::foo();进行静态调用
B::bar();
?>
总结:静态、动态调用都指类、对象对其方法的调用,动态指的是创建(new)了对象,然后用对象变量去调用方法;静态则是没有创建对象,直接用类名去调用。至于另一个对象那就很简单了,不同的类创建不同的对象,比如class A;class B ,$a = new A();$b = new B();$a and $b 相对之间就是另一个对象了。
延伸:伪变量 $this 通常未定义,如果其所在的方法是被静态调用的话。但这不是个严格规定:如果一个方法被从另一个对象内静态调用的话,则 $this 会被定义。此时 $this 的值是那个发出调用的对象。
⑦ PHP命名空间动态调用类
不是这样调用的,命名空间只是一中命名的方式,跟调用没有直接联系。用auto_load()加载
⑧ php 如何调用类
//把你的类写好,在另一个页面需要使用直接引入即可:
<?php
require'MyClass.php';//引入你的类
$var=newMyClass;//实例化你的类
$var->action();//使用方法
//如果存在命名空间,就导入该命名空间下的类或实例化指定命名空间下的类即可:
namespaceAB;
classB{
//位于AB
}
useABB;//导入你的类
$var=newB;//直接实例化
//或者这样:
$var=newABB;//注意,需要完全限定名称
⑨ php 执行类中的方法
你是想问怎么调用test方法吗?
$func="test()";
$program->$func;
改成:
$func="test";
$program->$func();
⑩ php框架中动态加载类的几种方式
//方法1.
function__autoload($name){
require$name.'.class.php';
}
//方法2.
spl_autoload_register('load');
functionload($name){
require$name.'.class.php';
}