小编SOF*_*OFe的帖子

Php/OOP如何避免同一类的实例从其他对象访问私有属性/方法

我知道大多数OOP语言(如果不是全部)的私有可见性在类的基础上定义隐私,即同一类的不同实例可以访问彼此的私有属性/方法.

我想阻止这一点,我想知道什么是最好的设计/实现,以便在不产生负面性能影响的情况下做到这一点.

例如,我知道我可以实现AOP并使用符号,但这会导致性能下降,因为languange引擎必须创建类的反射并检查注释.所以,基本上,我的问题是,避免同一个类的实例访问彼此的私有方法/属性的最佳方法是什么?

例:

class Product
{
    private $_prize;
    public function __construct($prize)
    {
        $this->_prize = $prize;
    }

    public function calculateDiscount(Product $extraProduct)
    {
        $extraProduct->_prize = 0; //How to avoid this?
    }
}

$productA = new Product(10);
$productB = new Product(25);
$productA->calculateDiscount($productB);
Run Code Online (Sandbox Code Playgroud)

php oop

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

用于 GitHub 集成 API 的 JWT 的错误凭证

我注册了GitHub 集成并下载了 RSA 私钥(PEM 文件)。在我的 PHP 脚本中,我使用这个库来编码我的令牌,方式如下:

use Firebase\JWT\JWT;

$token = [
        "iat" => time(),
        "exp" => time() + 3600,
        "iss" => $my_integration_id
];
$key = file_get_contents($path_to_pem_file);
echo JWT::encode($token, $key, "RS256");
Run Code Online (Sandbox Code Playgroud)

PEM文件是这样的(我已经重新生成了私钥):

-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEA1bT61yW2fo4SI6TZXo+3dsyyxitcsw0kdhoGufsEkgdqbpeF
2/TfJtwYj9Veq11LNHuyoYk51DxUIyoC2Ul45E/s9kOw+qjXDJAOf3z9kq+obcOL
145ivQwsRF8bB1MQf8YsE/jAhVdxdIfRbw4UG8Fn0RPce/WQ18RI7Li4xfM138RP
2MQhZsx289ale7n+OtDzzajC4oj9qlaNFFKpSuCVGf6fqnktCOoFu1+ouB/+u3oc
eneS/qmSxwI7N7MrxOTnoHqhxIiatNFisK85Anc/WZ9duWS9i88GhtK86YMaWnCj
5nodzFwSF6SzBS+iOrI2AJennOTjsOrtjjQXzQIDAQABAoIBAQDKVhoRTfGljRn7
iX8NGwFXh6PUIQYZuN3GvAmWWOYQ5NiOcQQaJ5SIlGbk9940XZZw0JVmgCiym5QF
3ybnV7sQX+Q5ngmYqfdCO7qeVlc3ZP0RP83Nf1BZMYdQDMPogWrjr1vYZPLSzOHs
tRNEFI5RYSLMQAPHkc9bmsp45sR7FXj+tZEjM3NkcF4n8Jud/ARVAX/tzOWfF6A4
rhtGJfqYCvEF69J/dsHyy28egawrTxqPd6d1BKLdOh05xHkFL26wtgJWpHcNAZNZ
DUZs0Twe6Cw3XYQtlUD6D5mkj3zzh5hZ4xsoKftNfD2ZA1N0RVks0j5wrUjPI6jV
bVDRvvbBAoGBAPp2yjhTuchwpVOcGVYnqF1jVgXssSYdiydUglKtxzhta7c23xqK
v5B/cWdsz8mIKFmOcjr97GFUT8K6sZG77im05gDBCV7YuIMwekNmZ3m1MqUWtiZY
sEqCarIYPzQk9iPPxyZrmOVL/5KqlgRj9YmYFzjLpfnaxvk4rIMyVF21AoGBANpu
NLw7LfufPeSbIkSIeZ6X1ndspuZDzWVjgi0hmVdozMwxT1wmfoinJ27gxhKStwmG
9kbYE4QbGBSAlkJqoSf8QWVIH+/Qq9/9mbi1T4p+AgJSYiz1voOGnOk0RoJku6Zn
9XkcGXCUh5ckxWyYbXjHqBqHTXHeJzk9zoRfBuC5AoGBAI1/yPUTkBUGVtCqksHS
u9KuyS2lr9spu7DnlIzjMnbVkpI6hMa49krLRSU6GxXvP2SBDlX3mLDP8hPAZ4s+
0elsErkAVavo4izzmU80rmbbEJamAxgc6NPfZCnjeumZrBlFTGyPQxzf165jg0dN
ta0baJskqktC50BrXULtjy41AoGANa4j06aPlGj8IvRlJYaMrQcPs+XF1o0PKz2b
PlAliS++NOhhYnorWpYJwNwIkYPw66x5VcvAcBTghBld1BC0bkk2IRfqkVstAi0m
3Bfi5lw1TjDE49u46EXqxf0M3vq2ixy9XPgk4GAAOorU4e1L6gTXMT3TMIqyBQVF
fY6E+DECgYEA22HhPud5KLAX6drbMEe54uttiUrs/K3nft/xTYWU1BIG9r/HPKQh
3OWD/Dknek+i5hW89OOROPaUmnjaTR3/ARAxTlpxDdBWKu2mCXS/LcdEWdy7teEu
dDbqqotO4jmTh94FVWgVLDVVmrVSp++fwstI6foPGPABlbsrJxyGUsc=
-----END RSA PRIVATE KEY-----
Run Code Online (Sandbox Code Playgroud)

我将整个字符串传递给JWT::encode,并得到以下输出:

eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.eyJpYXQiOjE0NzQzOTI0NjQsImV4cCI6MTQ3NDM5NjA2NCwiaXNzIjoyMDF9.ZodSJyrq_SJfLTx4ifnCRWC9cbX1NmqOY3bADcuU7Wc18oZnH3EtZErvLgW6-reuR1-flsNbrji2dL9Zsm3rE-1FtEambcs1Xxynz3PE42yFMimQ5WyiAHdJhbh8-fB0hLIxn2I0oBiJbpZp92Rm2E2xxA1m4lmAubatY0JDR3FS4MmjR-pOZRbkgA4QwaTb0Q7R0tSUaoJo1ETLZoApp5ofsyt5hciB7wogTigA08H4r8TBUuSY4LeHWX9IfmDqHh5gVLDHhFXuLp1Qfm-8ltnLMgcelTmA9QE9NxxVcHQtYvNnE-EvXsh04Oqiyg51eq5cDoc4wA_WhTB4w-9NWg
Run Code Online (Sandbox Code Playgroud)

我将此输出(没有尾随换行符,我可以确认)存储到 Bash 变量中$JWT,并尝试像这样访问 GitHub API: …

php authentication rsa github-api jwt

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

如何在Graphviz上添加带下划线的下划线标签?

我想在Graphviz上使用带下划线的下划线标签,例如下面的图像:

在此处输入图片说明

format dot graphviz

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

C++错误:'&'标记之前的预期初始化程序

两年前在一台suse 10.1 Linux机器上编译的以下C++代码.

#ifndef DATA_H
#define DATA_H
#include <iostream>
#include <iomanip>


inline double sqr(double x) { return x*x; }
enum   Direction { X,Y,Z };

inline Direction next(const Direction d)
{
  switch(d)
  {
  case X: return Y;
  case Y: return Z;
  case Z: return X;
  }
}

inline ostream& operator<<(ostream& os,const Direction d)
{
  switch(d)
  {
  case X: return os << "X";
  case Y: return os << "Y";
  case Z: return os << "Z";
  }
}
...
...
Run Code Online (Sandbox Code Playgroud)

现在,我试图在Ubuntu 9.10上编译它,我得到错误:

data.h:20: …
Run Code Online (Sandbox Code Playgroud)

c++

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

问题:缺少 X-Content-Type-Options 标头

如何解决 X-Content-Type-Options 标头丢失等问题?

错误检测器发现了这个问题。

html php x-content-type-options

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

如何正确引用其他JSON架构文档($ ref)

我已经阅读了有关JSON Schema和JSON指针的RFC,但我仍然在努力理解如何正确引用其他文档.

可以说我有以下文件(在磁盘上):

/foo/bar/schema/base.json
/foo/bar/schema/model/model.json
Run Code Online (Sandbox Code Playgroud)

base.json像这样:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "/schema/base",
  "title": "Base Response",
  "description": "Schema descriptions of common properties of a response",
  "type": [ "object" ],

  "definitions": {
    "data": {
      "descrpition": "The response data is encapsulated within here",
      "example": "true",
      "type": [ "object", "array", "boolean", "null" ]
    }
  },

  "properties": {
    "data": { "$ref" : "#/definitions/data" }
  }
}
Run Code Online (Sandbox Code Playgroud)

model.json文件是这样的:

{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "id": "/schema/model/model",
  "type": "object",

  "$ref": "/schema/base.json"
}
Run Code Online (Sandbox Code Playgroud)

我在询问model.json中的$ ref值.我对标准的理解是在文档的id和$ ref之间,我们应该能够找到该文档.

或者,我想知道是否像:

"$ref": "../../base.json"
Run Code Online (Sandbox Code Playgroud)

会工作?

但是这些解决方案似乎都不能使用我尝试过的Python或PHP库.我不确定我哪里出错了?

json jsonschema json-ref

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

Liquid Studio:如何将JSON模式$ ref写入另一个文件

我试图在Liquid Studio 2017中使用“ $ ref”来引用位于不同文件中的JSON模式。引用的JSON模式和引用的JSON模式都位于同一目录中。

我尝试使用相对路径:

"$ref": "referredSchema.json/propertyName"
Run Code Online (Sandbox Code Playgroud)

并使用绝对路径:

"$ref": "file:///C:/JSON/referredSchema.json/propertyName"
"$ref": "file:///JSON/referredSchema.json/propertyName"
"$ref": "file:///JSON/referredSchema.json#/propertyName"
Run Code Online (Sandbox Code Playgroud)

和其他一些变化。它们都不起作用,我总是收到错误消息“无效的URI”。此外,文档仅提及在没有给出合理示例的情况下可以引用其他文档。

所以我想知道预期的URI格式是什么。

json liquid-xml json-ref

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

在一定范围内生成无重复的随机数

我正在创建一个应用程序,它将生成随机数.所以每次它会产生三个数字num1,num2和num3.这些数字不应重复.例如,如果num1 = 1而不是num2且num3不能等于1.我尝试过这段代码,它会显示三个不同的数字,范围从0到2.它的工作.但是我想生成1-3,2-4,3-5等随机数.那么我怎么能通过使用下面的代码来实现这一点.因为我是新手,所以请帮助我.谢谢.

for(int i=0; i<images.length; i++)
{
        num[i] = (int)(Math.random()*3);

        if (i == 0)
        {
        if(num[i]== 0)
            images[i].setImageResource(R.drawable.zero);
        else if(num[i]==1)
            images[i].setImageResource(R.drawable.one);
        else
            images[i].setImageResource(R.drawable.two);
        }

        else
        {
            while (num[i] ==  num[i-1] || num[i] == num[0] )
                num[i] = (int)(Math.random()*3);


        if(num[i]==0)
            images[i].setImageResource(R.drawable.zero);
        else if(num[i]==1)
            images[i].setImageResource(R.drawable.one);
        else
            images[i].setImageResource(R.drawable.two);

        }
    }
Run Code Online (Sandbox Code Playgroud)

java random algorithm range

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

如何使用ggplot修改条形图中的图例标题

想象一下,你有一个像这样的简单数据集:

   ive
      region   Edad
  1  Española   23
  2  Española   37
  3  Española   40
  4  Española   21
  5  Africana   29
  6  Española   42
  7   Europea   29
  8  Española   25
  9  Española   32
  10 Española   20
Run Code Online (Sandbox Code Playgroud)

我有兴趣为region按颜色分类的变量执行条形图。所以我创建了以下代码:

 g1 <- ggplot(ive, aes(x=reorder(ive$region, -table(ive$region)[ive$region])))
 g1 + geom_bar(aes(fill=ive$region)) + geom_text(stat='count',aes(label=..count..),vjust=-0.7) + xlab("")
Run Code Online (Sandbox Code Playgroud)

但是图例显示ive$region,我希望它显示自定义标题。

我几乎可以肯定这是一个愚蠢的问题,但我一直在尝试解决它 2 天,但我没有找到解决方法。

谢谢你,阿尔瓦罗

text r legend bar-chart ggplot2

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