我一直试图找出在PHP中使用位掩码或位域的最佳方法,现在我的应用程序的不同区域用于不同的用户设置和权限.我到目前为止最远的是来自PHP中用于设置的Stack Overflow post Bitmask中的svens贡献的类?.我稍微对它进行了修改,将其更改为使用类常量而不是DEFINE,并确保get方法仅传递给int.我还有一些示例代码来测试下面的类的功能.
我正在寻找任何建议/代码来进一步改进这个类,以便它可以在我的应用程序中用于设置和某些情况下的用户权限.
mcrumley在下面的评论中回答
另外,我对我的常数的编号有疑问.在这种类型的其他类和代码示例中,它将以2的幂列出事物.但是,即使我对常数1,2,3,4,5,6进行编号,它似乎也能正常工作.而不是1,2,4,8,16等.所以有人也可以澄清我是否应该改变我的常数?
一些想法......我真的想找出一种方法来扩展这个类,以便它可以很容易地与其他类一起使用.假设我有User班级和Messages班级.无论是User和Messages类将扩展此类,并能够使用位掩码为他们设置/权限(与其他班级后沿).那么也许应该更改当前的类常量,以便可以传入它们或其他选项?我真的不想在站点/脚本的其他部分定义(define('PERM_READ',1);)并且希望保持它有点封装,但也是灵活的; 我对这些想法持开放态度.我希望这是坚如磐石和灵活的,就像我说要与其他多个类一起使用设置或权限.可能应该使用某种阵列?来自上一个问题链接的@Svens发表评论"实施一些自动化的getter/setter或者ArrayAccess以获得更多的优点. - svens"您对这样的事情有什么看法?
请尽可能包含示例源代码.
<?php
class BitField {
const PERM_READ = 0;
const PERM_WRITE = 1;
const PERM_ADMIN = 2;
const PERM_ADMIN2 = 3;
const PERM_ADMIN3 = 4;
private $value;
public function __construct($value=0) {
$this->value = $value;
}
public function getValue() {
return $this->value;
}
public function get($n) {
if (is_int($n)) {
return ($this->value & (1 << $n)) != 0; …Run Code Online (Sandbox Code Playgroud) 我调用了一个 JSON API,它将数据发回给我,我想使用 Symfony 中的 Doctrine 将此 JSON 插入到我的 MariaDB 数据库中。
我检索的 JSON 是一个对象数组,我在互联网上遵循了几个示例(例如:Doctrine array vs simple_array vs json_array)但没有一个有效,我不知道我的问题是什么。
这是我的代码:
$client = new Client();
$request = $client->request('GET', 'mylink.com');
$response = $request->getBody();
$livescore = json_decode($response, true);
$array = [];
foreach($livescore as $value) {
if($value['match_hometeam_name'] === 'Lyon' || $value['match_awayteam_name'] === 'Lyon') {
$array = $value;
break;
}
}
$livescoreObj = new Livescore();
$livescoreObj->setDateRafraichissement(new \DateTime());
$livescoreObj->setMatch($array);
$this->entityManager->persist($livescoreObj);
$this->entityManager->flush($livescoreObj);
return new JsonResponse($array);
Run Code Online (Sandbox Code Playgroud)
我的实体:
<?php
namespace SGBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
/**
* …Run Code Online (Sandbox Code Playgroud)