小编And*_*dre的帖子

称为基类的成员函数,显式为statical

我有一个带有魔术方法的基类__call并已_callStatic定义,因此可以处理对未声明的成员函数的调用.

当你同时拥有非静态和静态的两者时,似乎无法从派生类中调用静态操作符,因为静态操作符::并不隐含意味着staticparentor一起使用,或者在本例中使用的名称是基类.这是一个特殊的语法解释: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)

php static overloading

8
推荐指数
1
解决办法
651
查看次数

MVVM Light中有两种ViewModel吗?

许多人建议WPF MVVM开发人员不要将Model实例从ViewModel暴露给View.要显示模型实例集合中的信息,请将所有单个项目包装到ViewModel实例中,并将ViewModel集合公开给View.

但是,使用MVVM Light在我看来有两种ViewModel:

  • 与视图具有一对一关系的ViewModel(例如MainWindowViewModelCustomerEditorViewModel).假设只有一个MainWindow,只有一个MainWindowViewModel.
  • 与模型实例(例如CustomerViewModel)具有一对一关系的ViewModel,是模型实例的某种"机制套装",提供计算属性等附加功能(例如Durationfrom StartTimeEndTime).一个普通的公司有很多Customers所以会有很多CustomerViewModels.

那么如何包装Model实例呢?

一个想法可能是创建包含ViewModelBase但不注册和实例化那些的包装类ViewModelLocator.我认为两个单独的东西都叫做ViewModel并不是一个好主意.

另一个想法可能是为第二种类型的ViewModel使用新的基类,也许可以调用ModelInfo.在单个实例中MainViewModel,将存在一组CustomerInfo实例,为Customer模型数据提供附加功能.

我倾向于后者,但因为这似乎是使用MVVM Light的一般情况,我相信必须有一个共同的解决方案来解决这个问题.


更新

我找到 MVVM Light的作者Laurent Bugnion的一篇文章.在他2012年的文章中,Bugnion使用两种不同的方法来初始化ViewModel:

  1. MainViewModel是注册的ViewModelLocator,没有构造函数参数.因此它适用于依赖注入,可以通过ServiceLocator实例化.
  2. FriendViewModel未注册,ViewModelLocator并且其构造函数将Model实例作为参数.它不能使用ServiceLocator进行实例化,而只能通过直接调用构造函数并传递模型实例来实例化.

这几乎与我原始问题中提到的差异一致,并且第一个想法是如何包装模型实例.

c# wpf mvvm mvvm-light entity-framework-6

4
推荐指数
1
解决办法
785
查看次数

赋值的模式绑定运算符

我正在使用未注释的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;意味着什么呢?我不是在问正则表达式,而是在它所表达的表达式上.

regex perl

3
推荐指数
1
解决办法
82
查看次数

标签 统计

c# ×1

entity-framework-6 ×1

mvvm ×1

mvvm-light ×1

overloading ×1

perl ×1

php ×1

regex ×1

static ×1

wpf ×1