【PHP实现伪静态方法汇总_PHP】教程文章相关的互联网学习教程文章

为什么PHP在对象上下文中使用静态方法?【代码】

我有以下代码(例如,实际上,这是我的真实代码):<?php class Foobar {public static function foo(){exit('foo');} }当我运行$foobar = new FooBar; $foobar-> foo()显示foo. 为什么PHP会尝试在对象上下文中使用静态方法?有办法避免这种情况吗? 好吧,你们没有得到我的问题:我知道静态和非静态方法之间的区别以及如何调用它们.这是我的全部观点,如果我调用$foobar-> foo(),为什么PHP会尝试运行静态方法? 注意:我运行PHP 5.4.4,向...

php – 如果我拥有的是类名的字符串,我如何从类中调用静态方法?【代码】

我怎样才能得到这样的东西?$class_name = 'ClassPeer'; $class_name::doSomething();解决方法:根据PHP的版本:call_user_func(array($class_name, 'doSomething')); call_user_func($class_name .'::doSomething'); // >5.2.3

PHP中的静态方法【代码】

为什么在PHP中你可以通过某个类的实例访问静态方法,但不仅仅是通过类型名称? 更新:我是.net开发人员,但我也与PHP开发人员合作.最近我发现了关于从实例调用的静态方法的这一刻,并且无法理解为什么它可以是有用的. 例:class Foo {public static Bar(){} }我们可以接受这样的方法:var $foo = new Foo(); $foo.Bar(); // ??????解决方法:在PHP中 例如,使用new关键字对类进行实例化; $MyClass = new MyClass(); 并且可以使用范围解析...

php – 用双冒号(::)调用非静态方法【代码】

为什么我不能使用静态方法(class :: method)的非静态方法?这是某种配置问题吗?class Teste {public function fun1() {echo 'fun1';}public static function fun2() {echo "static fun2" ;} }Teste::fun1(); // why? Teste::fun2(); //ok - is a static method解决方法:静态与非静态方法的PHP非常松散.我在这里没有注意到的一件事是,如果你在C类的非静态方法中静态地调用非静态方法,那么ns里面的$将引用你的C实例.class A {publi...

在PHP中使用call_user_func_array调用非静态方法【代码】

我正在尝试使用call_user_func_array调用对象的非静态方法,但我不了解如何制定回调.我在网上找到了很多类似的例子,但没有什么比我遇到的更像. class DBCommand {private $db; // The DBConnection objectfunction __construct() {$db = new DBConnection();}function callMethod($method, $arguments) {// This line gives me the error:return call_user_func_array(array($this->db, "$method"), $arguments);} } ?>使用DBCon...

php – 如何为使用Braintree和静态方法调用的端点编写集成测试【代码】

我正在使用严重依赖静态方法的Braintree PHP客户端.我在项目中的所有端点都包含集成测试就像是:Storage::shouldReceive('put')->once()->andReturn(true);$this->post('/api/payment');正如你所看到的,我也在使用Mockery来创建模拟.但是,由于Braintree库严重依赖静态方法,我无法创建方法,因此无法测试这些端点. 这是使用Braintree PHP客户端编写的代码示例:$result = Braintree\Transaction::sale(['amount' => '1000.00','payme...

php – 静态方法是邪恶的,那么Laravel如何使用这么多静态调用呢?【代码】

如果你已经进入了测试驱动的驱动开发,特别是在PHP中,你可能知道静态方法很难测试. PHPUnit已弃用模拟静态调用. 怎么做家伙模拟静态电话?如果静态对TDD不利,那么Laravel如何测试所有静态调用?解决方法:是的,Laravel使用了很多外墙,但你可以很容易地test everything.我建议你阅读Jeffrey Way的“Laravel Testing Decoded”,它会回答你所有的问题. 如果您不想使用外观,则不必使用,因为Laravel提供了许多全局帮助程序(如Redirect ::的...

Php:如何将私有静态方法公开,并且类不能被解释?【代码】

abstract class MyClass {private static makeMePublic(){} }我想让MyClass :: makeMePublic方法可以从外部调用.我在这里看到了一个解决方案:Best practices to test protected methods with PHPUnit但是需要对类进行实例化.在这种情况下,它是不可能的.那么,如何制作“公开”这种方法呢?解决方法:The docs say你可以将null作为第一个param传递给invokeArgs来执行静态方法.protected static function getMethod($name) {$class = ...

php – 一个类有多少静态方法太多了?【代码】

更新:重新提出问题,’这个类结构中是否有太多’静态方法(我意识到现在只有4个,但我最初只有2个)?如果是这样,有关如何重构这些类以使用某种Finder类的任何建议,以便我可以从Model类中删除静态函数? 我有以下抽象类:abstract class LP_Model_Abstract { protected static $_collectionClass = 'LP_Model_Collection';protected $_row = null;protected $_data = array();public function __construct($row = null) {$this->_row ...

php – 重构删除静态方法代码嗅觉【代码】

我有我需要创建的每个域对象的当前基本结构:class Model_Company extends LP_Model { protected static $_gatewayName = 'Model_Table_Company';protected static $_gateway;protected static $_class;public static function init(){if(self::$_gateway == null){self::$_gateway = new self::$_gatewayName();self::$_class = get_class();}}public static function get() {self::init();$param = func_get_arg(0);if($param ...

php – 通过对象调用静态方法是不好的做法?【代码】

我发现在某些用例中通过对象调用静态方法非常方便. 我想知道这是否被认为是一种不好的做法? 或者如果在将来的PHP版本中删除此功能?class Foo {public static function bar (){echo 'hi';} }class SubFoo extends Foo {public static function bar (){echo 'hi subfoo';} }// The normal way to call a static method. Foo::bar(); // => "hi"// Call the static method via instance. $foo = new Foo; $foo::bar(); // => "hi"//...

php – parent :: method() – 调用非静态方法【代码】

我不理解在PHP中调用父方法的概念.父方法不是静态的,但它是静态调用的 – 通常PHP会抛出错误/警告. 问题是,这是来自PHP的怪癖,还是它应该如何在OOP中? 以php.net为例:<?php class A {function example() {echo "I am A::example() and provide basic functionality.<br />\n";} }class B extends A {function example() {echo "I am B::example() and provide additional functionality.<br />\n";parent::example();} }$b = new...

在PHPUnit中模拟对象来模拟静态方法调用?【代码】

我试图测试一个管理数据库中数据访问的类(你知道,CRUD,本质上).我们正在使用的DB库碰巧有一个API,您首先通过静态调用获取表对象:function getFoo($id) {$MyTableRepresentation = DB_DataObject::factory("mytable");$MyTableRepresentation->get($id);... do some stuffreturn $somedata }……你明白了. 我们试图测试这个方法,但是模拟DataObject的东西,以便(a)我们不需要测试的实际数据库连接,(b)我们甚至不需要为测试包含DB_Da...

PHP:从父级调用静态方法时出现“调用未定义的方法”错误【代码】

如果两者都是静态的,那么从父类调用子类方法的正确方法是什么? 当我使用静态类时,它返回错误“调用未定义的方法A :: multi()”,但是当我使用非静态方法时没有问题,例如://-------------- STATIC ------------------ class A {public static function calc($a,$b) {return self::multi($a, $b);} } class B extends A {public static function multi($a, $b) {return $a*$b;} } echo B::calc(3,4); //ERROR!!//-------------- NON...

PHP在每个静态函数之前运行静态方法【代码】

我希望能够在调用任何函数之前自动调用函数. __callStatic的问题是它只在方法不存在时运行. 请参阅下面的代码. 我想让always_run()在静态类中调用的任何函数之前运行.class Test {public static function __callStatic($method, $parameters){echo __CLASS__ . "::" . $method;if (method_exists(__CLASS__, $method)) {self::always_run();forward_static_call_array(array(__CLASS__,$method),$args);}}public static function a...

静态方法 - 相关标签