此应用程序为您的GitHub存储库(或您想要的其他任何地方)添加了一个评审盾。 br />
如下所示:
要使用它,请使用标准图像/链接标记,如下所示:
[![Code Review](https://www.zomis.net/codereview/shield/?qid=54737)](https://codereview.stackexchange.com/q/54737/31562)
将
54737
替换为您要定向的问题ID,并用您的用户ID替换31562
(这样您就可以获取广播员/助推器/公关徽章)。您还可以使用Code Review Shield Creator来创建您的屏蔽。徽章的显示方式有多种:橙色背景
带有可接受答案的问题会显示观看次数和格力n background
代码的工作方式
由于每日Stack Exchange API限制为10,000个请求,我通过将以前的结果存储在数据库表中来避免过多的API请求,并且仅在距该问题的上一个API请求超过一个小时后才执行新请求。
代码包含以下功能:
buildURL($apiCall, $site, $filter, $apiKey)
:创建用于Stack Exchange API调用的URL(以供将来使用,我检查apiCall参数是否包含“?”。)apiCall($apiCall, $site, $filter)
:执行HTTP请求以使用curl
的Stack Exchange API,以纯字符串形式返回JSON数据fetchQuestion($qid, $db)
:将apiCall
检索到的JSON数据用作关联数组,从中提取有趣的数据,更新数据库并调用useData
。useData($data)
:采用关联数组并为其创建SVG XML dbOrAPI($qid, $db)
:主要入口点。 $qid
是代码审查问题ID,$db
是PDO对象。检查数据库中是否存在qid
并使用它(如果它是最新的),否则调用fetchQuestion
/ Zomis / CodeReview-Shield
<?php
require 'conf.php';
function buildURL($apiCall, $site, $filter, $apiKey) {
if (strpos($apiCall, '?') === false) {
$apiCall = $apiCall + "?dummy";
}
return "https://api.stackexchange.com/2.2/" . $apiCall
. "&site=" . $site
. "&filter=" . $filter . "&key=" . $apiKey;
}
function apiCall($apiCall, $site, $filter) {
global $apiKey;
$url = buildURL($apiCall, $site, $filter, $apiKey);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_ENCODING, 'gzip');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if ($result === false) {
$error = curl_error($ch);
curl_close($ch);
throw new Exception("Error calling Stack Exchange API: $error");
}
curl_close($ch);
return $result;
}
function fetchQuestion($qid, $db) {
$filter = "!)rcjzniPuafk4WNG65yr";
$data = apiCall("questions/$qid?order=desc&sort=activity", 'codereview', $filter);
$json = json_decode($data, true);
$question = $json['items'][0];
$dbfields = array("is_answered", "view_count", "favorite_count", "answer_count", "score", "accepted_answer_id");
$sql = 'INSERT INTO cr_badge (question_id, is_answered, favorite_count, answer_count, view_count, score, fetch_time, accepted_answer_id) ' .
'VALUES (:qid, :is_answered, :favorite_count, :answer_count, :view_count, :score, :time, :accepted_answer_id) ON DUPLICATE KEY UPDATE ' .
'is_answered = :is_answered, favorite_count = :favorite_count, answer_count = :answer_count, view_count = :view_count, score = :score, fetch_time = :time, accepted_answer_id = :accepted_answer_id ;';
$stmt = $db->prepare($sql);
$sql_params = array();
foreach ($dbfields as $field_name) {
if (isset($question[$field_name])) {
$sql_params[':' . $field_name] = $question[$field_name];
} else {
$sql_params[':' . $field_name] = 0;
}
}
$sql_params[':qid'] = $qid;
$sql_params[':time'] = time();
$result = $stmt->execute($sql_params);
if ($result) {
useData($question);
} else {
print_r($stmt->errorInfo());
}
return $json;
}
function useData($data) {
header('Content-type: image/svg+xml; charset=utf-8');
$is_answered = $data['text'];
$text = 'reviewed';
if (isset($data['accepted_answer_id']) && $data['accepted_answer_id'] != 0) {
$color = '97ca00';
$mode = 'views';
} elseif ($data['answer_count'] >= 1) {
$color = 'ff8000';
$right = $data['score'] . ' score';
$mode = 'answers';
} else {
$color = 'e05d44';
$text = 'reviewing';
$mode = 'score';
}
if (isset($_GET['mode'])) {
$mode = $_GET['mode'];
}
$data['answers'] = $data['answer_count'];
$data['views'] = $data['view_count'];
$right = $data[$mode] . ' ' . $mode;
$svg = <<<END
<svg xmlns="http://www.w3.org/2000/svg" width="137" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="137" height="20" rx="3" fill="#fff"/>
</mask>
<g mask="url(#a)">
<path fill="#555" d="M0 0h62v20H0z"/>
<path fill="#$color" d="M62 0h75v20H62z"/>
<path fill="url(#b)" d="M0 0h137v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="31" y="15" fill="#010101" fill-opacity=".3">$text</text>
<text x="31" y="14">$text</text>
<text x="98.5" y="15" fill="#010101" fill-opacity=".3">$right</text>
<text x="98.5" y="14">$right</text>
</g>
</svg>
END;
echo $svg;
}
function dbOrAPI($qid, $db) {
$sql = 'SELECT is_answered, favorite_count, answer_count, view_count, score, fetch_time, accepted_answer_id FROM cr_badge WHERE question_id = :qid;';
$stmt = $db->prepare($sql);
$result = $stmt->execute(array(':qid' => $qid));
if ($result) {
$row = $stmt->fetch(PDO::FETCH_ASSOC);
$time = $row['fetch_time'];
if ($time < time() - 3600) { // if time was updated more than one hour ago
// fetch data again
fetchQuestion($qid, $db);
} else {
useData($row);
}
} else {
print_r($stmt->errorInfo());
}
}
if (isset($_GET['qid'])) {
$qid = $_GET['qid'];
} else {
die("No qid set");
}
try {
$db = new PDO($dbhostname, $dbuser, $dbpass);
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
return false;
}
dbOrAPI($qid, $db);
主要问题
自从我使用PHP已经有一段时间了,所以我有兴趣知道我是否我坚持使用PHP约定(如果有的话),并且如果我按原意使用它的话。 >
#1 楼
就个人而言,您的代码确实很干净,构想很棒,我真的希望看到它很快实现。我看到了很多基本的
if-else
语句,如果您是三元组,使用它们确实会使这些语句变细,但这是有代价的的可读性。请参见以下示例以供使用:($time < time() - 3600 ? fetchQuestion($qid, $db) : useData($row));
($result ? useData($question) : print_r($stmt->errorInfo()));
我确实相信某些版本的PHP也支持
(a == a ?: doStuff());
语法,但是可能会误会。有些地方不一致或不符合标准:
$apiCall = $apiCall + "?dummy";
应该是
$apiCall .= "?dummy";
,并且在连接字符串时不应该使用+
,而最好是使用.
。喜欢:'words$varmorewords'
,我建议之所以这样,是因为它对读者更友好,并且由于前者可能会有问题,所以最好用大括号括起来:用. $var .
代替前者。很多人都犯了这个错误,我什至也是如此。在
'words{$var}morewords'
的curl
语句上方有两个空行,它们不需要在那里。 get_file_contents
,然后再不使用它,我建议用return $json
替换它的值,以使您的fetchQuestion()
循环看起来更整洁。您可以考虑将SVG保留在另一个文件中并替换您的变量,但我不是100以代码标准/最佳实践的百分率表示。 br />您为最终帖子中当前未使用的每个帖子检索并存储了很多变量:
useData()
:未使用,$is_answered
:已使用,$data['accepted_answer_id']
:未使用,if
:未使用,useData()
:未使用,isset
:未使用。尽管我可以看到将来使用这些更新,并且现在捕获它们非常棒,但是您可以考虑对其进行修改。
关于未来实现的主题,按钮上的计分器也很酷。
您可以考虑在项目中实现
''
和类似类的结构,以便可以在外部更轻松地使用它。评论
\ $ \ begingroup \ $
1.对于PHP,我想我会避免这种情况。 2.糟糕,我想这就是从Java复制代码并将其转换为PHP时发生的情况。 3. file_get_contents无法正常工作,必须使用curl :) 4.糟糕,在删除这些代码后忘记复制粘贴新代码(这是我所做的仅有的一点更改)5.确实,谢谢。 6.可能是一个好主意,这也可能导致使用不同的SVG模板的可能性。我喜欢。 7. SE API的JSON可能没有该设置,我的印象是PHP添加了警告或注意(如果我不这样做),但是我可能是错的。 8.更多的被使用。
\ $ \ endgroup \ $
–西蒙·福斯伯格
2015年7月1日在15:00
\ $ \ begingroup \ $
“应该是$ apiCall。=”?dummy“ ;,并且在连接字符串时不应该使用+”->您应该说“您必须使用$ apiCall。=“”?dummy“ ;.使用+连接字符串会导致字母总和始终为0。此外,您也可以将其视为错误。
\ $ \ endgroup \ $
–伊斯梅尔·米格尔(Ismael Miguel)
15年7月2日在9:17
\ $ \ begingroup \ $
另外,我注意到您以“ words $ varmorewords”为例。因为单引号内的变量没有扩展,所以它回显了单词$ varmorewords。如果替换引号,则将出现一个丑陋的错误,因为$ varmorewords是单个变量,不存在。它应该是“ words {$ var} morewords”。
\ $ \ endgroup \ $
–伊斯梅尔·米格尔(Ismael Miguel)
15年7月2日在10:55
\ $ \ begingroup \ $
顺便说一句,使用。字符串连接的运算符是一个绝不应该发生的可憎的事情。
\ $ \ endgroup \ $
–瑞安
15年7月2日在16:22
\ $ \ begingroup \ $
关于第一点:在很多情况下,降低可读性以节省字符数被认为是一件好事。三元是一个很好的例子。第2点将呈现字符串文字,您需要建议使用双引号。第3点:两者都有什么问题?它们对于自己的目的都是有用的。要点5:isset很重要,永远不要建议删除它。
\ $ \ endgroup \ $
–罗比·阿夫里尔(Robbie Averill)
16年5月18日在20:34
#2 楼
我想这和PHP一样漂亮:p(发现这种怪癖我真没意思。)
if (isset($question[$field_name])) {
$sql_params[':' . $field_name] = $question[$field_name];
} else {
$sql_params[':' . $field_name] = 0;
}
我很惊讶我们三元的好朋友@Quill忘了包括这个主要候选人:
$sql_params[':' . $field_name] = isset($question[$field_name]) ? $question[$field_name] : 0;
让我有点失望的另一件事是中间的代码:
这是什么意思?这个价值从何而来?重要吗?
像所有魔术常量一样,最好使用描述性名称将其放在文件顶部。
最后,也许根本不可行,
,但是能够使用CSS设置显示样式,而不是使用硬编码的
$color
值会很好。最后,
strpos($apiCall, '?') === false
具有足够的神秘性(PHP的错误,而不是您的错误),可能值得用辅助方法将其封装:代码干净且可读性强,并隔离垃圾,垃圾。评论
\ $ \ begingroup \ $
1.是的,PHP中的strpos不好玩(但同样,它是PHP,这是什么?)。 2.我同意那个三元论。 3.筛选器用于Stack Exchange API,这样我就只获得我感兴趣的信息-节省带宽。我不同意所有常量都应该在顶部声明。它仅使用一次,它直接与SE API相关联,我认为将其放在顶部不会带来任何好处。 4.我正在输出用于SVG图形的XML,我怀疑是否可以在其中使用CSS。我全力以赴使其更具动态性,但是我不认为CSS是要走的路:)
\ $ \ endgroup \ $
–西蒙·福斯伯格
15年7月1日在21:32
\ $ \ begingroup \ $
我没有弄明白strpos()有什么问题。除了参数的顺序。
\ $ \ endgroup \ $
–伊斯梅尔·米格尔(Ismael Miguel)
15年7月1日在22:44
\ $ \ begingroup \ $
如果这是100%的想法,我会在回答中加上它;-)没错,我没有解释太多,preg_match的问题在于它不是惯用语言。相比之下,strpos仍然更容易记住和阅读。也许并不逊色。但是至少对我来说,建议改变还不够。
\ $ \ endgroup \ $
– janos
15年7月2日在10:11
\ $ \ begingroup \ $
@janos我完全同意。有人需要为PHP创建一个不错的字符串库。
\ $ \ endgroup \ $
–伊斯梅尔·米格尔(Ismael Miguel)
15年7月2日在10:16
\ $ \ begingroup \ $
@Simon我还对strpos提出了另一点意见。关于“!)rcjzniPuafk4WNG65yr”,这是一个不可理解的事情,其目的在代码中间并不明显。当某些东西无法解释时,我无法相信它,并假设有一天它可能会发生莫名其妙的变化,然后我就不想从代码的中间挖掘出来。这就是为什么我更喜欢在顶部这样的东西,在上面容易看到,并带有描述性的名称,甚至是注释以说明其来源。
\ $ \ endgroup \ $
– janos
15年7月2日在12:16
#3 楼
Disclamer:我的评论要简短,比我期望的要长,但我只会关注
useData()
函数。 让我们开始吧!
我脑海中冒出的第一件事就是那堆巨大的东西缩进的SVG:
$svg = <<<END
<svg xmlns="http://www.w3.org/2000/svg" width="137" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="137" height="20" rx="3" fill="#fff"/>
</mask>
<g mask="url(#a)">
<path fill="#555" d="M0 0h62v20H0z"/>
<path fill="#$color" d="M62 0h75v20H62z"/>
<path fill="url(#b)" d="M0 0h137v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="31" y="15" fill="#010101" fill-opacity=".3">$text</text>
<text x="31" y="14">$text</text>
<text x="98.5" y="15" fill="#010101" fill-opacity=".3">$right</text>
<text x="98.5" y="14">$right</text>
</g>
</svg>
END;
echo $svg;
它肯定需要一些缩进。真是一团糟!考虑一下:
$svg = <<<END
<svg xmlns="http://www.w3.org/2000/svg" width="137" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="137" height="20" rx="3" fill="#fff"/>
</mask>
<g mask="url(#a)">
<path fill="#555" d="M0 0h62v20H0z"/>
<path fill="#$color" d="M62 0h75v20H62z"/>
<path fill="url(#b)" d="M0 0h137v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="31" y="15" fill="#010101" fill-opacity=".3">$text</text>
<text x="31" y="14">$text</text>
<text x="98.5" y="15" fill="#010101" fill-opacity=".3">$right</text>
<text x="98.5" y="14">$right</text>
</g>
</svg>
END;
echo $svg;
现在好多了!
仍然存在无用的归因。还可以修复该问题:
echo <<<END
<svg xmlns="http://www.w3.org/2000/svg" width="137" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="137" height="20" rx="3" fill="#fff"/>
</mask>
<g mask="url(#a)">
<path fill="#555" d="M0 0h62v20H0z"/>
<path fill="#$color" d="M62 0h75v20H62z"/>
<path fill="url(#b)" d="M0 0h137v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="31" y="15" fill="#010101" fill-opacity=".3">$text</text>
<text x="31" y="14">$text</text>
<text x="98.5" y="15" fill="#010101" fill-opacity=".3">$right</text>
<text x="98.5" y="14">$right</text>
</g>
</svg>
END;
现在好点了。但是,您的SVG中丢失了“杂散”变量。
为了便于阅读,请考虑将变量包装在方括号中:
echo <<<END
<svg xmlns="http://www.w3.org/2000/svg" width="137" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#bbb" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="137" height="20" rx="3" fill="#fff"/>
</mask>
<g mask="url(#a)">
<path fill="#555" d="M0 0h62v20H0z"/>
<path fill="#{$color}" d="M62 0h75v20H62z"/>
<path fill="url(#b)" d="M0 0h137v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="31" y="15" fill="#010101" fill-opacity=".3">{$text}</text>
<text x="31" y="14">{$text}</text>
<text x="98.5" y="15" fill="#010101" fill-opacity=".3">{$right}</text>
<text x="98.5" y="14">{$right}</text>
</g>
</svg>
END;
更好,不是吗?
但是现在,您想更改颜色。你会怎么做?手动更改所有内容吗?
我提出以下(部分)代码:
$colors = array(
'gradient'=>'bbb',
'mask'=>'fff',
'back'=>array('555', 'e05d44'),
'text'=>'010101',
'right'=>'010101'
);
if (isset($data['accepted_answer_id']) && $data['accepted_answer_id'] != 0) {
$color['back'][1] = '97ca00';
$mode = 'views';
} elseif ($data['answer_count'] >= 1) {
$colors['back'][1] = 'ff8000';
$right = $data['score'] . ' score';
$mode = 'answers';
} else {
$text = 'reviewing';
$mode = 'score';
}
// [...]
echo <<<END
<svg xmlns="http://www.w3.org/2000/svg" width="137" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#{$colors['gradient']}" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="137" height="20" rx="3" fill="#{$colors['mask']}"/>
</mask>
<g mask="url(#a)">
<path fill="#{$colors['back'][0]}" d="M0 0h62v20H0z"/>
<path fill="#{$colors['back'][1]}" d="M62 0h75v20H62z"/>
<path fill="url(#b)" d="M0 0h137v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="31" y="15" fill="#{$colors['text']}" fill-opacity=".3">{$text}</text>
<text x="31" y="14">{$text}</text>
<text x="98.5" y="15" fill="#{$colors['right']}" fill-opacity=".3">{$right}</text>
<text x="98.5" y="14">{$right}</text>
</g>
</svg>
END;
请注意,我已经删除了
$colors
变量else
的颜色属性,并将其作为默认颜色。代码:
if (isset($_GET['mode'])) {
$mode = $_GET['mode'];
}
$data['answers'] = $data['answer_count'];
$data['views'] = $data['view_count'];
$right = $data[$mode] . ' ' . $mode;
你闻到吗?我闻到代码注入了!
请始终验证您的输入。
仅使用此
if
即可:if (isset($_GET['mode']) && in_array($_GET['mode'], array('views','answers','score'))) {
$mode = $_GET['mode'];
}
这一点纯粹是主观的。
您盲目地相信自己的代码在此功能之前没有输出。
而不是: br />
header('Content-type: image/svg+xml; charset=utf-8');
考虑使用此方法:
if (!headers_sent()) {
header('Content-type: image/svg+xml; charset=utf-8');
}
万一发生错误,它仍然会向SVG发送先前的错误,但至少不会成为错误工厂! ,我决定将其从最终代码中删除。如前所述,您有一个无用的变量(
$is_answered
)。我也删除了它,因为它在那里什么也没做。非常挑剔的一点是将
echo <<<END
更改为echo <<<SVG
。这显示了回声的含义以及什么是巨大的块,而没有读取超过12个字符。
最终结果:
这是代码如下所示,并增加了几行以提高可读性:
function useData($data) {
header('Content-type: image/svg+xml; charset=utf-8');
$is_answered = $data['text'];
$text = 'reviewed';
$colors = array(
'gradient'=>'bbb',
'mask'=>'fff',
'back'=>array('555', 'e05d44'),
'text'=>'010101',
'right'=>'010101'
);
if (isset($data['accepted_answer_id']) && $data['accepted_answer_id'] != 0) {
$color['back'][1] = '97ca00';
$mode = 'views';
} elseif ($data['answer_count'] >= 1) {
$colors['back'][1] = 'ff8000';
$right = $data['score'] . ' score';
$mode = 'answers';
} else {
$text = 'reviewing';
$mode = 'score';
}
if (isset($_GET['mode']) && in_array($_GET['mode'], array('views','answers','score'))) {
$mode = $_GET['mode'];
}
$data['answers'] = $data['answer_count'];
$data['views'] = $data['view_count'];
$right = $data[$mode] . ' ' . $mode;
echo <<<SVG
<svg xmlns="http://www.w3.org/2000/svg" width="137" height="20">
<linearGradient id="b" x2="0" y2="100%">
<stop offset="0" stop-color="#{$colors['gradient']}" stop-opacity=".1"/>
<stop offset="1" stop-opacity=".1"/>
</linearGradient>
<mask id="a">
<rect width="137" height="20" rx="3" fill="#{$colors['mask']}"/>
</mask>
<g mask="url(#a)">
<path fill="#{$colors['back'][0]}" d="M0 0h62v20H0z"/>
<path fill="#{$colors['back'][1]}" d="M62 0h75v20H62z"/>
<path fill="url(#b)" d="M0 0h137v20H0z"/>
</g>
<g fill="#fff" text-anchor="middle" font-family="DejaVu Sans,Verdana,Geneva,sans-serif" font-size="11">
<text x="31" y="15" fill="#{$colors['text']}" fill-opacity=".3">{$text}</text>
<text x="31" y="14">{$text}</text>
<text x="98.5" y="15" fill="#{$colors['right']}" fill-opacity=".3">{$right}</text>
<text x="98.5" y="14">{$right}</text>
</g>
</svg>
SVG;
}
旁注:
在您发表任何言论之前,这主要是基于观点的而不是客观的!名称。
我强烈建议将其更改为
useData
(又名lowercase_and_underscore
)。为什么?如果您错误地编写了
snake_case
,您将很难查看usedata
,只是会发现您拼写了函数名称,而PHP并不关心函数名称中的大小写。如果您输入
"Where in the living fudge is this declared???"
,USE_DATA
或任何变体,则更容易找到名称。隐式地用Use_Data
拆分名称,然后进行部分比较。 /> 哪个更容易比较?
我不同意https://softwareengineering.stackexchange.com/questions/196416/whats-the-dominant-naming-在使用
_
进行精确定位时,在PHP-camelcase-或-undersc中使用变量约定。此外,PHP本身也不遵循这一点!查看所有函数名称。
但是,即使将名称更改为
aVeryInterestingMethodWellSpelled
,也将是一个不好的名字。为什么?好吧,这个名字使人想到您正在尝试使用一些数据来做某事。但是它在做什么?我不知道,我必须阅读整个函数才能知道。
我的建议:
averyinterestingmethodwellspelled
。它精确地显示了代码的作用:它输出SVG。很简单。
评论
\ $ \ begingroup \ $
我强烈不同意您的第6条建议,如果有一个错误在您想要设置标题之前就输出了某些东西,那么触发另一个错误/警告比选择静默运行更好。
\ $ \ endgroup \ $
– CodesInChaos
15年7月3日在8:12
\ $ \ begingroup \ $
@CodesInChaos我已经更改了它。我仍然保持第6点的位置,但是它不再是最终代码的一部分。这仍然是一个有效的意见。我只是不再“执行”它了。
\ $ \ endgroup \ $
–伊斯梅尔·米格尔(Ismael Miguel)
15年7月3日在10:30
\ $ \ begingroup \ $
关于_ vs CamelCase的亮点-更清晰,更易读!
\ $ \ endgroup \ $
–德米特里·扎伊采夫(Dmitri Zaitsev)
15年7月8日在4:22
评论
PHP编码标准:github.com/php-fig/fig-standards。 (注意:我不喜欢所有这些,尤其是埃及括号的使用。)我发出了将CodeReview-Shield添加到您的CodeReview-Shield存储库的请求请求。哈哈
我发现中等绿色的浅灰色文本有点难以阅读。我会选择深绿色或纯绿色的文字。
@IsmaelMiguel您已经可以使用它了,请参阅GitHub存储库,我在这篇文章中也包含了使用说明。唯一的事情是我托管了该服务,而不是Stack Exchange / Shields.io / GitHub /其他。
该工具如何扩展到多个提交的多个CR?提交者是否需要在每个拉取请求中更新问题/用户号?还是为每次提交使用单独的徽章更合适?如果是这样,这些徽章会住在哪里?