我见过两个这样的人:
$this->propertyName;
$this->methodName();
我知道代码应该是这样的:
class myClass{
public $propertyName;
public function methodName(){
// statements
}
}
最近我看到了这样的代码:
$this->CI->form_validation->set_message('investigate', '{field} ' . lang('wrong'));
什么是CI
(方法?)?什么是form_validation
?什么是set_message
?这些嵌套方法?它的代码如何?
答案 0 :(得分:1)
方法可以返回一个对象。您可以将此对象分配给变量,然后在其上调用方法:
$objB = $objA->getObjectB();
$objB->someMethod();
或者您可以跳过作业并将其内联;
$objA->getObjectB()->someMethod();
只要您的方法返回对象,您就可以继续堆叠它们:
$objA->getObjectB()->getObjectC()->getObjectD()->getObjectE();
对象属性也是如此。公共财产可以容纳另一个对象:
$objA->objB = new objectB();
$objA->objB->someMethodOnObjectB();
因此,返回包含对象的对象和公共属性的方法可以像这样堆叠。你也可以混合它们:
$objA->getObjectB()->somePropertyOnObjectB->someMethod();
另见Fluent Interface。对象通常为mutator方法返回自己的实例。这允许你转过来:
$obj = new Object();
$obj->setFoo('foo');
$obj->setBar('bar');
$obj->setBaz('baz');
$obj->doSomething();
进入这个:
$obj = new Object();
$obj->setFoo('foo')->setBar('bar')->setBaz('baz')->doSomething();
在PHP 5.6+中,您甚至不必将对象分配给变量,您可以直接取消引用new
调用:
(new Object())->setFoo('foo')->setBar('bar')->setBaz('baz')->doSomething();
答案 1 :(得分:0)
CI
是object
。在这个确切的上下文中,它是一个类属性,对象类型。从理论上讲,您可能还有一个返回对象的方法/函数。类似的东西:
$ClassInstance->MethodThatReturnAnObject()->ObjectProperty = 'bla';
甚至
$ClassInstance->MethodThatReturnAnObject()->ObjectMethod();
链条可能会继续更多层次。
答案 2 :(得分:0)
CI 是 $ this 对象中的属性, form_validation 是 CI 内的另一个对象 > set_message 是 form_validation
内的方法<?php
class FormValidation
{
public function set_message($message)
{
echo $message;
}
}
class CI
{
public $form_validation;
public function __construct()
{
$this->form_validation = new FormValidation();
}
}
class MyClass
{
public $CI;
public function __construct()
{
$this->CI = new CI();
}
public function doSomeStuff()
{
$this->CI->form_validation->set_message('my custom message');
}
}
$object = new MyClass();
$object->doSomeStuff();