php中冒号是什么,PHP中的::(双冒号)和 - >(箭头)有什么区别?

当左侧部分是对象实例时,使用$this.否则,使用parent。

这意味着$this主要用于访问实例成员(虽然它也可以用于访问静态成员,不建议使用这种用法),而parent通常用于访问静态成员(尽管在一些特殊情况下,它用于访问 实例成员)。

通常,$this用于范围解析,它的左侧可能有类名,parent,self或(在PHP 5.3中)static。 parent指的是使用它的类的超类的范围; self指的是使用它的类的范围; static指的是“被调用范围”(参见后期静态绑定)。

规则是$this的调用是一个实例调用当且仅当:

目标方法未声明为静态和

在调用时有一个兼容的对象上下文,这意味着必须为true:该调用是从存在$this的上下文进行的

$this的类是被调用方法的类或它的子类。

例:

class A {

public function func_instance() {

echo "in ", __METHOD__, "\n";

}

public function callDynamic() {

echo "in ", __METHOD__, "\n";

B::dyn();

}

}

class B extends A {

public static $prop_static = 'B::$prop_static value';

public $prop_instance = 'B::$prop_instance value';

public function func_instance() {

echo "in ", __METHOD__, "\n";

/* this is one exception where :: is required to access an

* instance member.

* The super implementation of func_instance is being

* accessed here */

parent::func_instance();

A::func_instance(); //same as the statement above

}

public static function func_static() {

echo "in ", __METHOD__, "\n";

}

public function __call($name, $arguments) {

echo "in dynamic $name (__call)", "\n";

}

public static function __callStatic($name, $arguments) {

echo "in dynamic $name (__callStatic)", "\n";

}

}

echo 'B::$prop_static: ', B::$prop_static, "\n";

echo 'B::func_static(): ', B::func_static(), "\n";

$a = new A;

$b = new B;

echo '$b->prop_instance: ', $b->prop_instance, "\n";

//not recommended (static method called as instance method):

echo '$b->func_static(): ', $b->func_static(), "\n";

echo '$b->func_instance():', "\n", $b->func_instance(), "\n";

/* This is more tricky

* in the first case, a static call is made because $this is an

* instance of A, so B::dyn() is a method of an incompatible class

*/

echo '$a->dyn():', "\n", $a->callDynamic(), "\n";

/* in this case, an instance call is made because $this is an

* instance of B (despite the fact we are in a method of A), so

* B::dyn() is a method of a compatible class (namely, it's the

* same class as the object's)

*/

echo '$b->dyn():', "\n", $b->callDynamic(), "\n";

输出:

B::$prop_static: B::$prop_static value

B::func_static(): in B::func_static

$b->prop_instance: B::$prop_instance value

$b->func_static(): in B::func_static

$b->func_instance():

in B::func_instance

in A::func_instance

in A::func_instance

$a->dyn():

in A::callDynamic

in dynamic dyn (__callStatic)

$b->dyn():

in A::callDynamic

in dynamic dyn (__call)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你的代码片段看起来是在检查几个条件,并根据这些条件在字符串插入不同的部分。这个代码片段本身看起来没有明显的语法错误,但是它可能存在一些逻辑问题。 首先,这个代码片段似乎是在检查三个条件:acode->h == 1,acode->x == 1,和 acode->d == 1。如果这些条件的任何一个为真,那么就会在字符串插入相应的部分。然而,你似乎遗漏了一个逻辑语句来连接这三个条件。在C语言,你需要在这些条件之间使用逻辑运算符(如&&或||)。 另外,这段代码使用了三个问号(??)作为三元运算符的一部分,这是C语言不推荐使用的。推荐的方式是在每个条件后面使用一个问号(?),并在后面使用一个冒号(:)来分隔两个部分。 所以,你的代码应该更改为: ```c printf("%s%s%s", acode->h == 1 ? "hr" : "", acode->x == 1 ? "ab" : "", acode->d == 1 ? "ee" : ""); ``` 这个代码应该能按预期工作,只要acode->h、acode->x和acode->d都有相应的值,并且它们都是布尔类型(即只有true或false)。如果其一个为false,那么相应的字符串就会被打印出来。 最后要注意的是,printf函数需要一个格式化字符串作为参数,而你的代码并没有提供这个字符串。你可能需要确保在调用printf函数时提供了正确的格式化字符串。例如: ```c printf("The value of acode->h is %s, acode->x is %s, and acode->d is %s\n", acode->h == 1 ? "hr" : "", acode->x == 1 ? "ab" : "", acode->d == 1 ? "ee" : ""); ``` 在这个例子,我假设你有一个名为acode的变量,它是一个结构体,包含h、x和d三个字段。然后我使用条件语句和格式化字符串来打印出这些字段的值。但你需要根据你的实际情况调整这段代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值