如何从静态方法中访问非静态方法?

时间:2018-10-01 05:38:06

标签: php

我在一个类中有两种方法,其中一种是静态的。我想从静态方法中访问非静态方法。那可能吗?我尝试过:

class Foo {
   public function qux(){

   }
   public static function waldo(){
       self::qux(); // Non-static method Foo::qux() should not be called statically
   }
}

使qux成为静态方法是实现此目的的唯一方法吗?如果用户不希望qux()是静态方法怎么办?

2 个答案:

答案 0 :(得分:1)

这应该可以根据需要工作:

#include <iostream>
#include <vector>
#include <algorithm>

int maxKnapSack(std::vector<int>& v, std::vector<int>& w, int capacity) {
    std::vector<std::vector<int>> dp(capacity + 1, std::vector<int>(v.size() + 1));
    for (int i = 0; i <= v.size(); i++) {
        for (int j = 0; j <= capacity; j++) {
            if (i == 0 || j == 0) {
                dp[i][j] = 0;
            }
            else if (j - w[i - 1] >= 0) {
                dp[i][j] = std::max(v[i-1] + dp[i - 1][j - w[i-1]], dp[i - 1][j]);
            }
            else {
                dp[i][j] = dp[i - 1][j];
            }
        }
    }
    return dp[v.size()][capacity];
}


int main() {

    std::vector<int> v = { 10, 4, 7 };
    std::vector<int> w = { 4, 2, 3 };
    int capacity = 5;

    std::cout << "The maximum I can get is " << maxKnapSack(v, w, capacity) << "\n";

    std::cin.get();
}

没有其他方法可以在不首先创建对象本身的情况下调用动态方法/函数。

当然,如果您仅使用该对象一次并立即调用所有方法或函数,则可以使用以下内容:

class Foo {
   public function qux(){

   }

   public static function waldo(){
       $foo = new Foo();
       $foo->qux();
   }
}

答案 1 :(得分:0)

UNLOGGED