PackageBaseClass::另一个类->;方法()-在PHP5中是否可能?
我尝试调用如下方法:PackageBaseClass::另一个类->;方法()-在PHP5中是否可能?,php,oop,Php,Oop,我尝试调用如下方法: PackageName::BankAccounts->create('arg1', 'arg2'); 但我得到了一个解析错误: 分析错误:语法错误,在 在PHP5.6.14中,但我真的觉得我已经在某个地方看到了这种风格 是我错了,还是在PHP5中有这样一种方式来完成调用方法的技巧?我认为正确的语法是: (new PromisePay::BankAccountRepository())->getBankAccountById('asdasdasd'); 要从类
PackageName::BankAccounts->create('arg1', 'arg2');
但我得到了一个解析错误:
分析错误:语法错误,在
在PHP5.6.14中,但我真的觉得我已经在某个地方看到了这种风格
是我错了,还是在PHP5中有这样一种方式来完成调用方法的技巧?我认为正确的语法是:
(new PromisePay::BankAccountRepository())->getBankAccountById('asdasdasd');
要从类名中获取对象,必须使用new
创建对象
但是,在一个新对象上立即这样做没有多大意义。您必须先将银行帐户添加到存储库中,然后才能检索它。我认为正确的语法是:
(new PromisePay::BankAccountRepository())->getBankAccountById('asdasdasd');
要从类名中获取对象,必须使用new
创建对象
但是,在一个新对象上立即这样做没有多大意义。您必须先将银行帐户添加到存储库中,然后才能检索它。好了:
<?php
class BankAccount {
public static function getBankAccountById($id) {
return array('data', 'more data', '_self' => $id);
}
}
class BaseClass {
public static function __callStatic($className, $argsWeWontUse) {
return new $className;
}
}
$call = BaseClass::BankAccount()->getBankAccountById('abcdefghijkl123456');
print_r($call);
/*
Array
(
[0] => data
[1] => more data
[_self] => abcdefghijkl123456
)
*/
?>
尽管如此,我还是很感谢您抽出时间来巴尔马。我们开始了:
<?php
class BankAccount {
public static function getBankAccountById($id) {
return array('data', 'more data', '_self' => $id);
}
}
class BaseClass {
public static function __callStatic($className, $argsWeWontUse) {
return new $className;
}
}
$call = BaseClass::BankAccount()->getBankAccountById('abcdefghijkl123456');
print_r($call);
/*
Array
(
[0] => data
[1] => more data
[_self] => abcdefghijkl123456
)
*/
?>
尽管如此,我还是很感谢您花时间在Barmar上。
->
在对象之后,而不是在类名之后。如果您调用的是静态方法,那么它就是PackageName::BankAccounts::create()
@Barmar BankAccounts也是一个对象。PackageName和BankAccounts都是,而create()是一种方法。@Barmar我知道有PackageName::BankAccounts::create()
的可能性,但我的员工希望按照我在问题中所述的方式完成。如果BankAccounts
是一个包含对象的变量,在它之前需要一个$
:PackageName::$BankAccounts
->
在对象后面,而不是类名。如果调用的是静态方法,则它也是PackageName::BankAccounts::create()
@Barmar BankAccounts也是一个对象。PackageName和BankAccounts都是,而create()是一种方法。@Barmar我知道有PackageName::BankAccounts::create()
的可能性,但我的员工希望按照我在问题中所述的方式完成。如果BankAccounts
是一个包含对象的变量,您需要一个$
才能提交:PackageName::$BankAccounts
。好的,我非常感谢您的回复,如果这仍然是最好的答案,我会在接下来的几个小时内接受。那么,关于PackageName::Class:Method()模式,您认为您的答案也是最好的选择吗?PackageName::Class::Method()
用于静态方法getBankAccountById
是一个对对象进行操作的方法。很抱歉,getBankAccountById
是一个静态方法,PackageName::Class::method()
会产生PHP解析错误,使其看起来像是PHP中不允许使用上述调用格式。这与文档中的示例不同。它显示:$bankAccount=$repo->getBankAccountById('Account_id')代码>这是原始包中的文档(我的是fork)。你可以在这里看到最新版本的getBankAccountById
:好的,我很感谢你的回复,如果它仍然是最好的答案,我会在接下来的几个小时内接受它。那么,关于PackageName::Class:Method()模式,您认为您的答案也是最好的选择吗?PackageName::Class::Method()
用于静态方法getBankAccountById
是一个对对象进行操作的方法。很抱歉,getBankAccountById
是一个静态方法,PackageName::Class::method()
会产生PHP解析错误,使其看起来像是PHP中不允许使用上述调用格式。这与文档中的示例不同。它显示:$bankAccount=$repo->getBankAccountById('Account_id')代码>这是原始包中的文档(我的是fork)。您可以在此处查看最新版本的getBankAccountById
: