问题列表 - 第42603页

PHP 5.3:后期静态绑定在父类中定义但在子类中丢失时对属性不起作用

看看这个例子,注意输出指示.

<?php

class Mommy
{
    protected static $_data = "Mommy Data";

    public static function init( $data )
    {
        static::$_data = $data;
    }

    public static function showData()
    {
        echo static::$_data . "<br>";
    }
}

class Brother extends Mommy
{
}

class Sister extends Mommy
{
}

Brother::init( "Brother Data" );
Sister::init( "Sister Data" );

Brother::showData(); // Outputs: Sister Data
Sister::showData(); // Outputs: Sister Data

?>
Run Code Online (Sandbox Code Playgroud)

我的理解是使用static关键字将引用子类,但显然它只是在子类中缺少父类时神奇地应用于父类.(这对PHP来说是一种危险的行为,更多内容将在下面解释.)

我有以下两点要记住我为什么要这样做:

  1. 我不希望在所有子类中定义所有属性的冗余.
  2. 我希望将属性定义为父类中的默认值,并且我希望子类定义能够在需要时覆盖这些属性.每当默认情况发生时,子类需要排除属性,这就是为什么我没有在上面的示例中定义子类中的属性.

但是,如果我们想要在运行时覆盖属性(通过init方法),它将为父类重写它!从那时起,早期初始化的子课程(如兄弟的情况)意外地改变了你.

显然,这是子类没有自己的静态属性副本的结果,只要它没有在子类内部显式定义 - 而不是抛出错误,它会切换静态行为以访问父类.因此,是否存在某种方式,父类可以动态创建属于子类的属性,而不会出现在子类定义中?这样子类可以有自己的静态属性副本,静态关键字可以正确引用它,并且可以编写它以考虑父属性默认值.

还是有其他解决方案,好的,坏的还是丑的?

php oop late-static-binding php-5.3

10
推荐指数
1
解决办法
1556
查看次数

非静态方法需要目标C#

我有一个win表单应用程序,其中列表框显示方法(按属性).我试图动态调用线程中的方法,使用反射从列表框的选定值获取方法信息.但是,当调用Methodinfo.Invoke时,我得到了这个内部异常"非静态方法需要一个目标C#".

这是我的代码(请记住,我仍然是c#和编程的新手.)

private void PopulateComboBox()
{//Populates list box by getting methods with declared attributes
    MethodInfo[] methods = typeof(MainForm).GetMethods();

    MyToken token = null;
    List<KeyValuePair<String, MethodInfo>> items =
        new List<KeyValuePair<string, MethodInfo>>();

    foreach (MethodInfo method in methods)
    {
        token = Attribute.GetCustomAttribute(method,
            typeof(MyToken), false) as MyToken;
        if (token == null)
            continue;

        items.Add(new KeyValuePair<String, MethodInfo>(
            token.DisplayName, method));

    }

    testListBox.DataSource = items;
    testListBox.DisplayMember = "Key";
    testListBox.ValueMember = "Value";
}

public void GetTest()
{//The next two methods handle selected value of the listbox and invoke …
Run Code Online (Sandbox Code Playgroud)

c# reflection multithreading

14
推荐指数
1
解决办法
6万
查看次数

将HttpApi与I/O完成端口配合使用

我偶然发现了微软的HTTP Server API.介绍说明:

HTTP Server API使应用程序无需使用Microsoft Internet Information Server(IIS)即可通过HTTP进行通信.应用程序可以注册以接收特定URL的HTTP请求,接收HTTP请求以及发送HTTP响应.HTTP Server API包括SSL支持,以便应用程序可以在没有IIS的情况下通过安全HTTP连接交换数据.它还可以与I/O完成端口配合使用.

找到这个很酷的东西,我仔细研究了两个版本API的功能列表.现在,文档中提到I/O完成端口的唯一其他部分是HttpReceiveHttpRequest()函数.最后一个参数是一个可选OVERLAPPED结构,具有以下描述:

对于异步调用,设置pOverlapped为指向OVERLAPPED结构; 对于同步调用,将其设置为NULL.同步调用将阻塞,直到请求已到达指定队列并且已检索到其中的一些或全部,而异步调用会立即返回ERROR_IO_PENDING,然后调用应用程序使用GetOverlappedResult() 或I/O完成端口来确定操作何时完成.有关使用OVERLAPPED结构进行同步的更多信息,请参阅同步和重叠输入和输出.

没有其他信息,所有结构都是不透明的,故意隐藏连接信息.另请注意,同步和重叠输入和输出主题未提及HTTP API.

有没有人知道如何将HTTP API的队列连接到I/O完成端口?

windows http

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

AuthorizationAttribute可以阻止操作完全执行吗?

我有一个似乎在表面上工作的自定义AuthorizationAttribute.当没有正确权限的用户通过浏览器请求操作时,会显示相应的消息.

我开始将此属性应用于HttpPost执行删除等操作.即使响应正确,操作的主体仍会执行(在这种情况下,项目将被删除).

我希望能够做的是完全阻止action方法在授权属性失败时执行任何操作.这是AuthorizationAttributes的用途,还是我应该以另一种方式查看?

更新:

public override void OnAuthorization(AuthorizationContext filterContext)
{
    Check.Require(filterContext != null);

    if (service.HasPermission(requiredPermission))
        return;

    filterContext.HttpContext.Response.StatusCode = 404;
    filterContext.HttpContext.Response.StatusDescription = "File not found";
}
Run Code Online (Sandbox Code Playgroud)

控制器操作正在按如下方式进行装饰:

[HttpPost, RequiresPermission(Permissions.CanDeleteContentItem)]
public JsonResult Delete(Guid id)
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc attributes authorization

9
推荐指数
1
解决办法
1542
查看次数

自行重新排列作业队列的方法

我有一个作业队列(使用Amazon SQS),它将作业交给许多机器,用于通过HTTP获取和处理各种文档.有数百个不同的主机被访问,并且没有可预测的作业顺序.

为了礼貌,我不希望我的系统在一台主机上反复敲击.因此,如果我得到一份工作#123从example.com获取某些内容,但我发现我在过去的X秒内刚刚从example.com获取了另一件事,我应该转向其他内容并保存作业#123 for后来.

问题是,实现这种模式的好方法是什么?

似乎第一步是让作业运行者在所有域的某个位置保留一个列表,并且最后一次访问该域上的某些内容.我想这可能是一个简单的数据库表.

如果消息处理器获得必须延迟的作业,则有许多可能的选项可用于执行操作.

  1. 只需将消息的副本推送到队列的末尾,然后将其丢弃而不执行它.希望在下一次出现时,足够的时间过去了.这可能会导致大量冗余SQS消息,尤其是在同一域的大型作业集群同时通过的情况下.

  2. 在礼貌要求可以执行工作之前,需要休息几秒钟.这可能导致许多队列处理器同时无所事事.

  3. 接受作业,但将其保存在每个队列处理器上的某个本地队列中.我想每个处理器都可以通过这种方式"声称"一些工作,然后选择以任何顺序处理它们以达到最大程度的礼貌.这仍然是不可预测的,因为每个队列处理器需要知道被其他所有域击中的域.

  4. 为每个域建立单独的队列,并为每个队列分配一个进程.每个进程都必须在执行每个作业之间暂停X秒,因此会有很多睡眠进程开销,但这可能不是一件坏事.

你有设计这种东西的经验吗?你会推荐什么策略?

parallel-processing perl design-patterns job-queue amazon-sqs

6
推荐指数
1
解决办法
453
查看次数

在Rails3中post.count to_sql?

我有一个型号名称Post.当我尝试运行Post.count时,我得到一个没有问题的结果.但是,我怀疑Ruby用于计算返回的帖子数量.

相反,我想使用SQL来计算帖子的数量,因为它要快得多.

我发现使用Arel实现这一目标的唯一方法是Post.select("COUNT(id)").如果没有count在模型上显式调用select,是否无法运行命令?谢谢!

ruby database sqlite ruby-on-rails

5
推荐指数
2
解决办法
1296
查看次数

寻找能够在2个业务合作伙伴之间平均分配利润/损失的功能

这不是作业,因为我不是学生.这是为了我一般的好奇心.如果我在这里重新发明轮子,我道歉.我寻求的功能可以定义如下(语言不可知):

int getPercentageOfA(double moneyA, double workA, double moneyB, double workB)
{
    // Perhaps you may assume that workA == 0
    // Compute result
    return result;
}
Run Code Online (Sandbox Code Playgroud)

假设爱丽丝和鲍勃想要一起做生意......比如......卖旧书.爱丽丝只对将钱投入其中而感兴趣.鲍勃可能会投资一些钱,但他可能没有可用的投资.然而,他将努力寻找卖方,买方和进行维护.

没有工具,教育,医疗保险费用或其他费用需要考虑.爱丽丝和鲍勃都希望"平等地"分配利润(高级用户的权重不同,如40/60).两者都是企业家,所以他们处理低投资回报率/工资和高收入.没有固定工资,最低工资,固定投资回报率或最低投资回报率.他们试图找到最好的交易,承担风险并为此而努力.

现在,让我们坚持使用50/50型号.如果爱丽丝投资100美元,鲍勃投资工作,他们将获得60美元的利润(或损失),他们将平均分配 - 要么他们的努力/投资得到30美元,要么鲍勃最终欠爱丽丝30美元.

第二种可能性:爱丽丝和鲍勃都投资100,然后鲍勃完成所有工作,他们最终获得了60美元的利润.看起来爱丽丝应该只得到15美元,因为30美元的利润来自鲍勃的投资和鲍勃的努力,所以爱丽丝将没有它,而另外30美元将被分成50/50.

即使A和B想要分割它35/65或者你有什么,上面的两个例子都是微不足道的.现在它变得更加复杂:如果爱丽丝投资70美元,鲍勃投资30美元+完成所有工作.看起来很简单:(70,30)=(30,30)+(40,0)......但是,如果我们只知道如何相对于彼此称重这两个部分.另一个复杂的(我认为)例子:如果爱丽丝和鲍勃分别投资70美元和30美元,并且投入相同数量的工作怎么办?

我有一些数据点:

  • 当A和B投入相同数量的工作且相同的$ - 50/50.
  • 当A投入100%的资金时,B完成100%的工作 - 50/50.
  • 当A完成所有工作并投入所有资金时 - 对于B的A/0为100(反之亦然).
  • 当A投入50%的资金时,B投入50%的资金以及投入所有工作--A为25,B为75(反之亦然).

如果我解决的事情,使得总workA = 0%,workB = 100%总的工作,然后getPercentageOfA成为一个功能:高度z给予xy.问题是 - 你如何在这几点之间推断这个函数?这个功能是什么?

如果你可以覆盖工作A不必0%完全工作的情况,并且当投资与工作分成85/15或使用其他模型时,新功能会是什么?

language-agnostic math function

5
推荐指数
1
解决办法
309
查看次数

android中的iptables

IPtables是否内置在android内核中?如果是,如何在我们的Android应用程序中使用它们?

networking android iptables

34
推荐指数
2
解决办法
6万
查看次数

未经检查的调用compareTo

背景

创建一个Map可以按值排序的.

问题

代码按预期执行,但不能干净地编译:

http://pastebin.com/bWhbHQmT

public class SortableValueMap<K, V> extends LinkedHashMap<K, V> {
  ...
  public void sortByValue() {
      ...
      Collections.sort( list, new Comparator<Map.Entry>() {
          public int compare( Map.Entry entry1, Map.Entry entry2 ) {
            return ((Comparable)entry1.getValue()).compareTo( entry2.getValue() );
          }
      });
  ...
Run Code Online (Sandbox Code Playgroud)

Comparable作为通用参数传递给Map.Entry<K, V>(V必须是Comparable?)的语法- 以便(Comparable)警告中显示的类型转换可以被删除 - 包括我.

警告

编译器的cantankerous抱怨:

SortableValueMap.java:24:警告:[unchecked] unchecked调用compareTo(T)作为原始类型java.lang.Comparable的成员

   return ((Comparable)entry1.getValue()).compareTo( entry2.getValue() );
Run Code Online (Sandbox Code Playgroud)

如何在没有任何警告的情况下将代码更改为编译(在编译时不会抑制它们-Xlint:unchecked)?

有关

谢谢!

java generics collections comparable comparator

0
推荐指数
1
解决办法
2267
查看次数

客户端验证类型为FILE的INPUT而不使用jQuery进行回发

我想在客户端检查在提交表单之前是否已选择文件.

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>

@using (Html.BeginForm("Upload", "Files", FormMethod.Post, new { enctype = "multipart/form-data" }))
        { 
            <input id="File" name="File" type="file" size="80" />
            <input type="submit" name="name" value="Upload" />    
        }
Run Code Online (Sandbox Code Playgroud)

目前,此表单正在进行回发以进行验证.出了什么问题?

asp.net jquery jquery-validate asp.net-mvc-3

5
推荐指数
2
解决办法
3812
查看次数