07
08
Name
09
Marks
10
Experience
11
Position
12
Expected Salary
13
14ENDHTML;
15foreach ($applicants as $applicant) {
16 echo '
';
17 echo "
" . $applicant["name"] . "
";
18 echo '
' . $applicant["marks"] . "
";
19 echo "
" . $applicant["experience"] . "
";
20 echo "
" . positionLink($applicant["experience"]) . "
";
21 echo '
' . $applicant["salary"] . "
";
22 echo "
";
23}
24echo "
";
25
26function marksClass($info) {
27 return ($info > 60) ? "pass" : "fail";
28}
29
30function positionLink($experience) {
31 return ($experience > 3)
32 ? 'Apply for Senior Software Engineer'
33 : 'Apply for Software Engineer';
34}
35
36function salaryClass($experience, $salary) {
37 switch ($experience) {
38 case 1:
39 return ($salary < 5000) ? "accept" : "reject";
40 case 2:
41 return ($salary < 10000) ? "accept" : "reject";
42 case 3:
43 return ($salary < 20000) ? "accept" : "reject";
44 default:
45 return ($salary < 50000) ? "accept" : "reject";
46 }
47}
现在,让我们做它用phpQuery和比较代码和优势。
现在,让我们做它用phpQuery和比较代码和优势。
01
02require("phpQuery/phpQuery.php");
03$doc = phpQuery::newDocument('
');
04phpQuery::selectDocument($doc);
05
06// retrieve applicants from database
07//...
08
09$doc["#main"]->append('
10
11
12
Name
13
Marks
14
Experience
15
Position
16
Expected Salary
17
');
18
19foreach ($applicants as $key => $applicant) {
20 $doc["#main"]->append('
');
21 foreach ($applicant as $field => $info) {
22 $doc["#main"]->find("#app_" . $key)->append('
' . $info . "
");
23 if ($field == "experience") {
24 $doc["#main"]->find("#app_" . $key)->append('
-
');
25 }
26 }
27}
28
29addMarksClass($doc);
30addSalaryClass($doc);
31addPositionLink($doc);
32
33print $doc;
34
35function addMarksClass(&$doc) {
36 $marks = pq("._marks");
37 foreach ($marks as $appMark) {
38 if (pq($appMark)->html() > 60) {
39 pq($appMark)->addClass("pass");
40 }
41 else {
42 pq($appMark)->addClass("fail");
43 }
44 }
45}
46
47function addSalaryClass(&$doc) {
48 $marks = pq("._salary");
49 foreach ($marks as $appMark) {
50 $experience = pq($appMark)->parent()->find("._experience" )->html();
51 $salary = pq($appMark)->html();
52
53 switch ($experience) {
54 case 1:
55 pq($appMark)->addClass(
56 ($salary < 5000) ? "accept" : "reject"
57 );
58 break;
59 case 2:
60 pq($appMark)->addClass(
61 ($salary < 10000) ? "accept" : "reject"
62 );
63 break;
64 case 3:
65 pq($appMark)->addClass(
66 ($salary < 20000) ? "accept" : "reject"
67 );
68 break;
69 default:
70 pq($appMark)->addClass(
71 ($salary < 50000) ? "accept" : "reject"
72 );
73 }
74 }
75}
76
77function addPositionLink(&$doc) {
78 $experience = pq("._experience");
79 foreach ($experiece as $appExp) {
80 if (pq($appExp)->html() > 3) {
81 pq($appExp)->parent()->find("._position")->html('Apply for Senior Software Engineer');
82 }
83 else{
84 pq($appExp)->parent()->find("._position")->html('Apply for Software Engineer');
85 }
86 }
87}
phpQuery是很容易的,如果你已经使用jQuery的知识。最上面的代码将是不言自明。我想提一提,PQ()虽然是指到当前文档。所有其他的jQuery函数。
尽管两者看起来很相似,代码使用phpQuery提供更好的质量和可扩展性。想想如何脆的原代码可以是,如果你以后添加额外的功能。假设我们要添加额外的工作经验为基础的商标验证。在这种情况下,你必须添加另一种方法和分配的foreach循环内返回的结果。这意味着你要改变已经写好的代码,违反了开闭原则:
软件实体(类,模块,函数等)应该对扩展开放,对修改关闭。
有了第二次的例如使用phpQuery的,首先生成代码没有任何验证,然后传递到每个功能表,并放置到原始表的变化。每个功能并不影响其他功能,所以我们可以写任何新要求的新的功能和使用外循环与其他功能。我们不修改现有的代码,这听起来不错吧?这被称为装修: