标签: protected

如何保护php中的数组部分不被修改?

我在php中有一个像这样的数组:

$ myArray = array('name'=>'juank','age'=> 26,'config'=> array('usertype'=>'admin','etc'=>'bla bla'));

我需要这个数组可以在脚本中访问,以允许在"config"字段中的任何字段EXCEPT中进行更改.有没有办法保护数组或数组的一部分不被修改,就像它在类中声明私有一样?我尝试将其定义为常量,但在脚本执行期间它的值会发生变化.将它作为一个类实现意味着我必须从头开始重建完整的应用程序:S

谢谢!

php arrays private protected

2
推荐指数
1
解决办法
625
查看次数

C++"未在此范围内声明的变量" - 再次

我想这是一个非常简单的问题,可能是一个已经多次回答的问题.但是,我真的对C++感到厌烦,并且搜索无法找到解决方案.我真的很感激帮助.

基本上:

#ifndef ANIMAL_H
#define ANIMAL_H

class Animal 
{
 public:
  void execute();
  void setName(char*);
  Animal();
  virtual ~Animal(); 

 private:
  void eat();
  virtual void sleep() = 0;

 protected:
  char* name;
};

class Lion: public Animal 
{
 public:
  Lion();

 private:
  virtual void sleep();
};



class Pig: public Animal 
{
 public:
  Pig();

 private:
  virtual void sleep();
};



class Cow: public Animal
{
 public:
  Cow();

 private:

  virtual void sleep();
};

#endif
Run Code Online (Sandbox Code Playgroud)

是头文件,其中:

#include <iostream>
#include "Animal.h"

using namespace std;

Animal::Animal()
{
 name = new char[20]; …
Run Code Online (Sandbox Code Playgroud)

c++ variables scope protected out

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

C#奇怪的异常错误

我正在调用本机.NET DLL中的函数,如下所示:

string v = myDLL.GetValueFromString("header");
MessageBox.Show(v);
Run Code Online (Sandbox Code Playgroud)

在执行程序时,我得到了这个奇怪的错误(在执行此函数的行上):"尝试读取或写入受保护的内存.这通常表明其他内存已损坏."

这个错误信息是什么意思?有没有办法解决这个问题?

c# memory dll exception protected

2
推荐指数
1
解决办法
273
查看次数

性能与设计相关的java中的私有/受保护方法

我们正和朋友讨论java代码设计和效率问题.

他认为,出于性能原因,方法最好是私有的,以及在覆盖时最好保持类一致性.

我认为最好保护方法以获得完全的可定制性,并且一旦用户想要改变其部分行为,就应避免浪费时间修改和释放API.

我们知道组合优于继承,所以在这里我主要关注性能比较.

一个简单的测试(见下文)证明父类具有受保护方法的扩展类并不比具有私有方法的父类慢.甚至有时 (我真的不太了解性能变化)更快.

elapsed:8051733.063 microseconds for A (private)
elapsed:8036953.805 microseconds for B (protected)
Run Code Online (Sandbox Code Playgroud)

你认为下面提到的测试足够强大,可以进行比较吗?

public class VerifPerfProtected {
public static void main(String[] args) {
    int ncalls = 1000000000; //10^9
    ChildrenClassA a = new ChildrenClassA();
    ChildrenClassB b = new ChildrenClassB();

    long start = System.nanoTime();
    a.manyCalls(ncalls);
    long stop = System.nanoTime();
    System.out.println("elapsed:" + (stop - start)/1000.0 + " microseconds for A (private)");

    start = System.nanoTime();
    b.manyCalls(ncalls);
    stop = System.nanoTime();
    System.out.println("elapsed:" + (stop - start)/1000.0 + " microseconds …
Run Code Online (Sandbox Code Playgroud)

java private protected

2
推荐指数
1
解决办法
1514
查看次数

如何测试受保护的方法?

我有一个ASP.NET页面,它是许多派生页面的基础,它包含以下受保护的方法

protected Change SetupApproval(string changeDescription)
{
    Change change = Change.GetInstance();
    change.Description = changeDescription;
    change.DateOfChange = DateTime.Now;
    change.MadeBy = Common.ActiveDirectory.GetUsersFullName(AccessCheck.CurrentUser());
    change.Page = PageName;
    return change;
}
Run Code Online (Sandbox Code Playgroud)

我想写下面的单元测试

[TestMethod]
public void SetupApproval_SubmitChange_ValidateDescription()
{
    var page = new DerivedFromBaseClass();
    var messageToTest = "This is a test description";

    var change = (page as InternalAppsPage).SetupApproval(messageToTest);

    Assert.IsTrue(messageToTest == change.Description);
}
Run Code Online (Sandbox Code Playgroud)

我确信这个代码有很多错误(所以建议更正),但我的主要目标是开始为整个项目实施一些测试.我决定从小开始 - 一次一个方法.我首先尝试创建一个新的测试项目,但后来我无法访问SetupApproval方法,因为它受到保护.我的下一次尝试是将TestMethod放在基页内,但是没有办法运行测试.

最后,我使用的是Visual Studio 2008的默认测试框架.

unit-testing protected visual-studio-2008

2
推荐指数
1
解决办法
6934
查看次数

为什么这里的第一个语句不违反受保护的访问,而第二个语句呢?

我正在研究这段代码:

#include <iostream>

class A
{
public:
    A() {};

    void fox(A& otherA) { otherA.hello(); }

protected:
    void hello() {std::cout << "hello" << std::endl;}
};

A a1,a2;

int main(void)
{
    a1.fox(a2);
    a1.hello();
}
Run Code Online (Sandbox Code Playgroud)

并且我有点困惑,如何说,a1.fox(a2)将说,a1.hello()而不会说.我本以为它会破坏因为我可以在类中调用protected和private函数...允许我在otherA对象上执行此操作意味着我必须知道我是从它自己的成员中调用它类.为什么/如何运作?

c++ protected

2
推荐指数
1
解决办法
100
查看次数

f#中的受保护虚拟方法

  • F#不支持protected方法的定义.这里解释了为什么
  • F#用抽象类中定义的virtual方法替换方法abstract(参见此处).

我想知道是否有办法阻止abstract从派生类外部访问方法.

virtual f# protected abstract

2
推荐指数
1
解决办法
505
查看次数

限制子类访问父类方法

假设我有一个接口I和A和B类.

interface I
{
  method();
}

class A implements I
{
  method()
  { //Implementation 1
  }
}

class B extends A
{
  method()
  { //Implementation 2
  }
}
Run Code Online (Sandbox Code Playgroud)

我想限制B访问'方法'.对b.method()的调用应始终使用a.method()而不是b.method实现,其中a和b分别是A和B的实例.有没有解决方法?

希望接口支持另一个访问修饰符来处理这种情况.

java oop interface protected

2
推荐指数
1
解决办法
578
查看次数

Java中基类的超类的受保护方法会发生什么?

我有一个A班级,package1Bpackage2其中继承A.A包含方法m1protected.现在我的疑问是,当我B在另一个类中创建一个对象时,C也是package2,对象B无法访问方法m1为什么?以下是我的代码

package com.package1;

public class A {

    protected void m1(){
        System.out.println("I'm protectd method of A");
    }
}


package com.package2;

import com.package1.A;

public class B extends A {


    public static void main(String[] args) {

        B b = new B();
        b.m1();          // b object able to access m1

    }

}


package com.package2;

public class C { …
Run Code Online (Sandbox Code Playgroud)

java inheritance protected

2
推荐指数
1
解决办法
7761
查看次数

您不会用于删除对象的基类的析构函数是虚拟的吗?

说我有两个基类,

struct A {}; 
struct B {}; 
Run Code Online (Sandbox Code Playgroud)

以及使用多重继承的派生类

struct D : A, B {}; 
Run Code Online (Sandbox Code Playgroud)

如果我的使用场景是这样的:

A *obj = new D; 
Run Code Online (Sandbox Code Playgroud)

即我永远不会使用B基类来引用派生对象,我是否必须使两个基础的析构函数虚拟?我目前正在申报的析构函数Bprotected禁止从这样其他用户,但是否足够?

析构函数怎么样D

c++ destructor protected multiple-inheritance virtual-destructor

2
推荐指数
1
解决办法
97
查看次数