我有一个带有魔术方法的基类__call并已_callStatic定义,因此可以处理对未声明的成员函数的调用.
当你同时拥有非静态和静态的两者时,似乎无法从派生类中调用静态操作符,因为静态操作符::并不隐含意味着static与parentor一起使用,或者在本例中使用的名称是基类.这是一个特殊的语法解释:http://php.net/manual/pl/keyword.parent.php
我想在这里做的是调用__callStaticwich失败的派生类,因为调用默认为非静态调用并由其处理__call.
如何在基类的成员函数上进行显式静态调用?
<?php
class MyBaseClass {
public static function __callStatic($what, $args)
{
return 'static call';
}
public function __call($what, $args)
{
return 'non-static call';
}
}
class MyDerivedClass extends MyBaseClass {
function someAction()
{
//this seems to be interpreted as parent::Foo()
//and so does not imply a static call
return MyBaseClass::Foo(); //
}
}
$bar = new MyDerivedClass();
echo $bar->someAction(); //outputs …Run Code Online (Sandbox Code Playgroud) 许多人建议WPF MVVM开发人员不要将Model实例从ViewModel暴露给View.要显示模型实例集合中的信息,请将所有单个项目包装到ViewModel实例中,并将ViewModel集合公开给View.
但是,使用MVVM Light在我看来有两种ViewModel:
MainWindowViewModel或CustomerEditorViewModel).假设只有一个MainWindow,只有一个MainWindowViewModel.CustomerViewModel)具有一对一关系的ViewModel,是模型实例的某种"机制套装",提供计算属性等附加功能(例如Durationfrom StartTime和EndTime).一个普通的公司有很多Customers所以会有很多CustomerViewModels.那么如何包装Model实例呢?
一个想法可能是创建包含ViewModelBase但不注册和实例化那些的包装类ViewModelLocator.我认为两个单独的东西都叫做ViewModel并不是一个好主意.
另一个想法可能是为第二种类型的ViewModel使用新的基类,也许可以调用ModelInfo.在单个实例中MainViewModel,将存在一组CustomerInfo实例,为Customer模型数据提供附加功能.
我倾向于后者,但因为这似乎是使用MVVM Light的一般情况,我相信必须有一个共同的解决方案来解决这个问题.
更新
我找到了 MVVM Light的作者Laurent Bugnion的一篇文章.在他2012年的文章中,Bugnion使用两种不同的方法来初始化ViewModel:
MainViewModel是注册的ViewModelLocator,没有构造函数参数.因此它适用于依赖注入,可以通过ServiceLocator实例化.FriendViewModel未注册,ViewModelLocator并且其构造函数将Model实例作为参数.它不能使用ServiceLocator进行实例化,而只能通过直接调用构造函数并传递模型实例来实例化.这几乎与我原始问题中提到的差异一致,并且第一个想法是如何包装模型实例.
我正在使用未注释的perl代码.我遇到了一段文章,对于我来说,作为一个perl初学者看起来太过分了.这是一个简化的适应:
my $foo;
my $bar = "x|y|z|";
$bar =~ s{\|$}{};
($foo = $bar) =~ s{ }{}gs;
Run Code Online (Sandbox Code Playgroud)
据我所知,$bar =~ s{\|$}{}将右侧的正则表达式应用于字符串里面$bar.但这个表达($foo = $bar) =~ s{ }{}gs;意味着什么呢?我不是在问正则表达式,而是在它所表达的表达式上.