├── .gitbook
└── assets
│ ├── image (1).png
│ ├── image (10).png
│ ├── image (100).png
│ ├── image (101).png
│ ├── image (102).png
│ ├── image (103).png
│ ├── image (104).png
│ ├── image (105).png
│ ├── image (106).png
│ ├── image (107).png
│ ├── image (108).png
│ ├── image (109).png
│ ├── image (11).png
│ ├── image (110).png
│ ├── image (111).png
│ ├── image (112).png
│ ├── image (113).png
│ ├── image (114).png
│ ├── image (115).png
│ ├── image (116).png
│ ├── image (117).png
│ ├── image (118).png
│ ├── image (119).png
│ ├── image (12).png
│ ├── image (120).png
│ ├── image (121).png
│ ├── image (122).png
│ ├── image (123).png
│ ├── image (124).png
│ ├── image (125).png
│ ├── image (126).png
│ ├── image (127).png
│ ├── image (128).png
│ ├── image (129).png
│ ├── image (13).png
│ ├── image (130).png
│ ├── image (131).png
│ ├── image (132).png
│ ├── image (133).png
│ ├── image (134).png
│ ├── image (135).png
│ ├── image (136).png
│ ├── image (137).png
│ ├── image (138).png
│ ├── image (139).png
│ ├── image (14).png
│ ├── image (140).png
│ ├── image (141).png
│ ├── image (142).png
│ ├── image (143).png
│ ├── image (144).png
│ ├── image (145).png
│ ├── image (146).png
│ ├── image (147).png
│ ├── image (148).png
│ ├── image (149).png
│ ├── image (15).png
│ ├── image (150).png
│ ├── image (151).png
│ ├── image (152).png
│ ├── image (153).png
│ ├── image (154).png
│ ├── image (155).png
│ ├── image (156).png
│ ├── image (157).png
│ ├── image (158).png
│ ├── image (159).png
│ ├── image (16).png
│ ├── image (160).png
│ ├── image (161).png
│ ├── image (162).png
│ ├── image (163).png
│ ├── image (164).png
│ ├── image (165).png
│ ├── image (166).png
│ ├── image (167).png
│ ├── image (168).png
│ ├── image (169).png
│ ├── image (17).png
│ ├── image (170).png
│ ├── image (171).png
│ ├── image (172).png
│ ├── image (173).png
│ ├── image (174).png
│ ├── image (175).png
│ ├── image (176).png
│ ├── image (177).png
│ ├── image (178).png
│ ├── image (179).png
│ ├── image (18).png
│ ├── image (180).png
│ ├── image (181).png
│ ├── image (182).png
│ ├── image (183).png
│ ├── image (184).png
│ ├── image (185).png
│ ├── image (186).png
│ ├── image (187).png
│ ├── image (188).png
│ ├── image (189).png
│ ├── image (19).png
│ ├── image (190).png
│ ├── image (191).png
│ ├── image (192).png
│ ├── image (193).png
│ ├── image (194).png
│ ├── image (195).png
│ ├── image (196).png
│ ├── image (197).png
│ ├── image (198).png
│ ├── image (199).png
│ ├── image (2).png
│ ├── image (20).png
│ ├── image (200).png
│ ├── image (201).png
│ ├── image (202).png
│ ├── image (203).png
│ ├── image (204).png
│ ├── image (205).png
│ ├── image (206).png
│ ├── image (207).png
│ ├── image (208).png
│ ├── image (209).png
│ ├── image (21).png
│ ├── image (210).png
│ ├── image (211).png
│ ├── image (212).png
│ ├── image (213).png
│ ├── image (214).png
│ ├── image (215).png
│ ├── image (216).png
│ ├── image (217).png
│ ├── image (218).png
│ ├── image (219).png
│ ├── image (22).png
│ ├── image (220).png
│ ├── image (221).png
│ ├── image (222).png
│ ├── image (223).png
│ ├── image (224).png
│ ├── image (225).png
│ ├── image (226).png
│ ├── image (227).png
│ ├── image (228).png
│ ├── image (229).png
│ ├── image (23).png
│ ├── image (230).png
│ ├── image (231).png
│ ├── image (232).png
│ ├── image (233).png
│ ├── image (234).png
│ ├── image (235).png
│ ├── image (236).png
│ ├── image (237).png
│ ├── image (238).png
│ ├── image (239).png
│ ├── image (24).png
│ ├── image (240).png
│ ├── image (241).png
│ ├── image (242).png
│ ├── image (243).png
│ ├── image (244).png
│ ├── image (25).png
│ ├── image (26).png
│ ├── image (27).png
│ ├── image (28).png
│ ├── image (29).png
│ ├── image (3).png
│ ├── image (30).png
│ ├── image (31).png
│ ├── image (32).png
│ ├── image (33).png
│ ├── image (34).png
│ ├── image (35).png
│ ├── image (36).png
│ ├── image (37).png
│ ├── image (38).png
│ ├── image (39).png
│ ├── image (4).png
│ ├── image (40).png
│ ├── image (41).png
│ ├── image (42).png
│ ├── image (43).png
│ ├── image (44).png
│ ├── image (45).png
│ ├── image (46).png
│ ├── image (47).png
│ ├── image (48).png
│ ├── image (49).png
│ ├── image (5).png
│ ├── image (50).png
│ ├── image (51).png
│ ├── image (52).png
│ ├── image (53).png
│ ├── image (54).png
│ ├── image (55).png
│ ├── image (56).png
│ ├── image (57).png
│ ├── image (58).png
│ ├── image (59).png
│ ├── image (6).png
│ ├── image (60).png
│ ├── image (61).png
│ ├── image (62).png
│ ├── image (63).png
│ ├── image (64).png
│ ├── image (65).png
│ ├── image (66).png
│ ├── image (67).png
│ ├── image (68).png
│ ├── image (69).png
│ ├── image (7).png
│ ├── image (70).png
│ ├── image (71).png
│ ├── image (72).png
│ ├── image (73).png
│ ├── image (74).png
│ ├── image (75).png
│ ├── image (76).png
│ ├── image (77).png
│ ├── image (78).png
│ ├── image (79).png
│ ├── image (8).png
│ ├── image (80).png
│ ├── image (81).png
│ ├── image (82).png
│ ├── image (83).png
│ ├── image (84).png
│ ├── image (85).png
│ ├── image (86).png
│ ├── image (87).png
│ ├── image (88).png
│ ├── image (89).png
│ ├── image (9).png
│ ├── image (90).png
│ ├── image (91).png
│ ├── image (92).png
│ ├── image (93).png
│ ├── image (94).png
│ ├── image (95).png
│ ├── image (96).png
│ ├── image (97).png
│ ├── image (98).png
│ ├── image (99).png
│ └── image.png
├── README.md
├── SUMMARY.md
├── mo-kuai-san.md
├── mo-kuai-san
├── README.md
├── gof-she-ji-mo-shi
│ ├── README.md
│ ├── gai-yao.md
│ ├── hang-wei-xing.md
│ └── jie-gou-xing.md
├── gou-jian-fa-huo-mo-kuai.md
├── gou-jian-he-xin-mo-kuai.md
├── gou-jian-ke-hu-mo-kuai.md
├── gou-jian-mu-lu-mo-kuai.md
├── gou-jian-xiao-shou-mo-kuai.md
├── gou-jian-zhi-fu-mo-kuai.md
├── mo-kuai-hua-wang-dian-ying-yong-de-xu-qiu-gui-fan
│ ├── README.md
│ ├── ding-yi-ji-shu-zhan.md
│ ├── gai-yao.md
│ └── xian-kuang-she-ji.md
├── solid-she-ji-yuan-ze
│ ├── README.md
│ ├── gai-yao.md
│ ├── jie-kou-ge-li-yuan-ze.md
│ ├── kai-bi-yuan-ze.md
│ ├── li-shi-ti-huan-yuan-ze.md
│ └── yi-lai-fan-zhuan-yuan-ze.md
├── symfony-gai-shu
│ ├── README.md
│ ├── biao-dan.md
│ ├── bundle-xi-tong.md
│ ├── ce-shi.md
│ ├── chuang-jian-yi-ge-kong-bai-xiang-mu.md
│ ├── kong-zhi-qi.md
│ ├── lu-you.md
│ ├── mo-ban.md
│ ├── pei-zhi-symfony.md
│ ├── shi-yong-symfony-kong-zhi-tai.md
│ ├── shu-ju-ku-he-doctrine.md
│ ├── xiao-jie.md
│ └── yan-zheng.md
└── zong-jie.md
└── mo-kuai-yi
├── README.md
├── di-ba-zhang-chu-li-ri-qi-shi-jian-he-guo-ji-hua-fang-mian.md
├── di-ba-zhang-chu-li-ri-qi-shi-jian-he-guo-ji-hua-fang-mian
├── README.md
├── an-di-qu-chu-li-huo-bi.md
├── an-di-qu-she-zhi-ri-qi-shi-jian-ge-shi.md
├── an-di-qu-she-zhi-shu-zi-ge-shi.md
├── bu-shi-yong-gettext-chu-li-fan-yi.md
├── chuang-jian-yi-ge-html-guo-ji-ri-li-sheng-cheng-qi.md
├── cong-liu-lan-qi-shu-ju-huo-qu-yu-yan-huan-jing.md
├── gou-jian-yi-ge-zhou-qi-xing-shi-jian-sheng-cheng-qi.md
├── zai-shi-tu-jiao-ben-zhong-shi-yong-emoji.md
└── zhuan-huan-fu-za-zi-fu.md
├── di-er-zhang-shi-yong-php-7-gao-xing-neng-te-xing.md
├── di-er-zhang-shi-yong-php-7-gao-xing-neng-te-xing
├── README.md
├── bian-li-hai-liang-wen-jian.md
├── di-gui-mu-lu-die-dai-qi.md
├── jiang-dian-zi-biao-ge-shang-chuan-dao-shu-ju-ku.md
├── le-jie-chou-xiang-yu-fa-shu.md
├── li-jie-foreach-chu-li-zhong-de-cha-yi.md
├── li-jie-ju-fa-fen-xi-zhong-de-cha-yi.md
└── shi-yong-php-7-zeng-qiang-gong-neng-ti-gao-xing-neng.md
├── di-jiu-zhang-kai-fa-zhong-jian-jian.md
├── di-jiu-zhang-kai-fa-zhong-jian-jian
├── README.md
├── jin-hang-kuang-jia-jian-de-xi-tong-tiao-yong.md
├── shi-shi-lu-you-xuan-ze.md
├── shi-yong-gao-su-huan-cun-ti-gao-xing-neng.md
├── shi-yong-zhong-jian-jian-jin-xing-ren-zheng.md
├── shi-yong-zhong-jian-jian-lai-kua-yu-yan.md
└── shi-yong-zhong-jian-jian-shi-xian-fang-wen-kong-zhi.md
├── di-liu-zhang-jian-li-ke-kuo-zhan-de-wang-zhan.md
├── di-liu-zhang-jian-li-ke-kuo-zhan-de-wang-zhan
├── README.md
├── chuang-jian-tong-yong-biao-dan-yuan-su-sheng-cheng-qi.md
├── chuang-jian-yi-ge-html-dan-xuan-yuan-su-sheng-cheng-qi.md
├── chuang-jian-yi-ge-html-xuan-ze-yuan-su-sheng-cheng-qi.md
├── jiang-yan-zheng-bang-ding-dao-biao-dan.md
├── lian-shi-post-guo-lv-qi.md
├── lian-shi-post-yan-zheng-qi.md
└── shi-xian-biao-dan-gong-chang.md
├── di-qi-zhang-fang-wen-web-fu-wu.md
├── di-qi-zhang-fang-wen-web-fu-wu
├── README.md
├── chuang-jian-yi-ge-jian-dan-de-rest-fu-wu-qi.md
├── chuang-jian-yi-ge-jian-dan-de-rest-ke-hu-duan.md
├── chuang-jian-yi-ge-jian-dan-de-soap-fu-wu-qi.md
├── chuang-jian-yi-ge-jian-dan-de-soap-ke-hu-duan.md
└── zai-php-he-xml-zhi-jian-zhuan-huan.md
├── di-san-zhang-shi-yong-php-han-shu.md
├── di-san-zhang-shi-yong-php-han-shu
├── README.md
├── han-shu-kai-fa.md
├── shi-yong-die-dai-qi.md
├── shi-yong-fan-hui-zhi-shu-ju-lei-xing.md
├── shi-yong-sheng-cheng-qi-bian-xie-zi-ji-de-die-dai-qi.md
└── shu-ju-lei-xing-ti-shi.md
├── di-shi-er-zhang-ti-gao-wang-zhan-an-quan.md
├── di-shi-er-zhang-ti-gao-wang-zhan-an-quan
├── README.md
├── bao-hu-php-hui-hua.md
├── bu-shi-yong-mcrypt-jin-hang-jia-mi-jie-mi.md
├── dai-you-yan-zheng-ma-de-an-quan-bao-hu-biao-ge.md
├── guo-lv-post-shu-ju.md
├── jian-li-yi-ge-an-quan-de-mi-ma-sheng-cheng-qi.md
├── yan-zheng-post-shu-ju.md
└── yong-ling-pai-bao-hu-biao-ge-de-an-quan.md
├── di-shi-san-zhang-zui-jia-shi-jian-ce-shi-he-tiao-shi.md
├── di-shi-san-zhang-zui-jia-shi-jian-ce-shi-he-tiao-shi
├── README.md
├── bian-xie-ce-shi-tao-jian.md
├── bian-xie-yi-ge-jian-dan-de-ce-shi.md
├── sheng-cheng-xu-jia-de-ce-shi-shu-ju.md
├── shi-yong-sessionstart-can-shu-zi-ding-yi-hui-hua.md
├── shi-yong-te-zheng-he-jie-kou.md
├── tong-yong-cuo-wu-chu-li-cheng-xu.md
└── tong-yong-yi-chang-chu-li-cheng-xu.md
├── di-shi-yi-zhang-ruan-jian-she-ji-mo-shi-de-shi-xian.md
├── di-shi-yi-zhang-ruan-jian-she-ji-mo-shi-de-shi-xian
├── README.md
├── chuang-jian-shu-zu-dao-dui-xiang-de-zhuan-hua-qi.md
├── ding-yi-yi-ge-ying-she-qi.md
├── gou-jian-dui-xiang-dao-shu-zu-dao-zhuan-hua-qi.md
├── shi-shi-ce-lve-mo-shi.md
├── shi-shi-fa-bu-ding-yue-she-ji-mo-shi.md
└── shi-xian-dui-xiang-guan-xi-ying-she.md
├── di-shi-zhang-gao-ji-suan-fa.md
├── di-shi-zhang-gao-ji-suan-fa
├── README.md
├── gou-jian-yi-ge-er-jin-zhi-sou-suo-lei.md
├── jian-li-mao-pao-pai-xu.md
├── shi-xian-yi-ge-dui-zhan.md
├── shi-xian-yi-ge-lian-biao.md
├── shi-xian-yi-ge-sou-suo-yin-qing.md
├── shi-yong-getter-he-setter.md
└── xian-shi-duo-wei-shu-zu-bing-lei-ji-zong-shu.md
├── di-si-zhang-shi-yong-php-mian-xiang-dui-xiang-cheng-xu-she-ji.md
├── di-si-zhang-shi-yong-php-mian-xiang-dui-xiang-cheng-xu-she-ji
├── README.md
├── ding-yi-ke-jian-xing.md
├── lei-de-kai-fa.md
├── lei-de-kuo-zhan.md
├── shi-xian-ni-ming-lei.md
├── shi-yong-jie-kou.md
├── shi-yong-jing-tai-shu-xing-he-fang-fa.md
├── shi-yong-ming-ming-kong-jian.md
└── shi-yong-te-xing.md
├── di-wu-zhang-yu-shu-ju-ku-de-jiao-hu.md
├── di-wu-zhang-yu-shu-ju-ku-de-jiao-hu
├── README.md
├── chu-li-fen-ye.md
├── ding-yi-shi-ti-yi-pi-pei-shu-ju-ku-biao.md
├── gou-jian-yi-ge-oop-sql-cha-xun-sheng-cheng-qi.md
├── jiang-er-ci-cha-zhao-qian-ru-dao-cha-xun-jie-guo-zhong.md
├── jiang-shi-ti-lei-yu-rdbms-cha-xun-bang-ding.md
├── shi-xian-jquery-datatables-de-php-cha-zhao.md
└── shi-yong-pdo-lian-jie-shu-ju-ku.md
└── di-yi-zhang-jian-li-ji-chu
├── README.md
├── an-zhuang-phpunit.md
├── chuang-jian-yi-ge-php-5-dao-php-7-dai-ma-zhuan-huan-qi.md
├── ding-yi-mysql-ce-shi-shu-ju-ku.md
├── jian-li-yi-ge-shen-du-wang-luo-sao-miao-qi.md
├── php-7-an-zhuang-zhu-yi-shi-xiang.md
├── shi-xian-lei-de-zi-dong-jia-zai.md
├── shi-yong-nei-zhi-de-php-web-fu-wu-qi.md
└── zhua-qu-yi-ge-wang-zhan.md
/.gitbook/assets/image (1).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (1).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (10).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (10).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (100).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (100).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (101).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (101).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (102).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (102).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (103).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (103).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (104).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (104).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (105).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (105).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (106).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (106).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (107).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (107).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (108).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (108).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (109).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (109).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (11).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (11).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (110).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (110).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (111).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (111).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (112).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (112).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (113).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (113).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (114).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (114).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (115).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (115).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (116).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (116).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (117).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (117).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (118).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (118).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (119).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (119).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (12).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (12).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (120).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (120).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (121).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (121).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (122).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (122).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (123).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (123).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (124).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (124).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (125).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (125).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (126).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (126).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (127).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (127).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (128).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (128).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (129).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (129).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (13).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (13).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (130).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (130).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (131).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (131).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (132).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (132).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (133).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (133).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (134).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (134).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (135).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (135).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (136).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (136).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (137).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (137).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (138).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (138).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (139).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (139).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (14).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (14).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (140).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (140).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (141).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (141).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (142).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (142).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (143).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (143).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (144).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (144).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (145).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (145).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (146).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (146).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (147).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (147).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (148).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (148).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (149).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (149).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (15).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (15).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (150).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (150).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (151).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (151).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (152).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (152).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (153).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (153).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (154).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (154).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (155).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (155).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (156).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (156).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (157).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (157).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (158).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (158).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (159).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (159).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (16).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (16).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (160).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (160).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (161).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (161).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (162).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (162).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (163).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (163).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (164).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (164).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (165).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (165).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (166).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (166).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (167).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (167).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (168).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (168).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (169).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (169).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (17).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (17).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (170).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (170).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (171).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (171).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (172).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (172).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (173).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (173).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (174).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (174).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (175).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (175).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (176).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (176).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (177).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (177).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (178).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (178).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (179).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (179).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (18).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (18).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (180).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (180).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (181).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (181).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (182).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (182).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (183).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (183).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (184).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (184).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (185).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (185).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (186).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (186).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (187).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (187).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (188).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (188).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (189).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (189).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (19).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (19).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (190).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (190).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (191).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (191).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (192).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (192).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (193).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (193).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (194).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (194).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (195).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (195).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (196).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (196).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (197).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (197).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (198).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (198).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (199).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (199).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (2).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (2).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (20).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (20).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (200).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (200).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (201).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (201).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (202).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (202).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (203).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (203).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (204).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (204).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (205).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (205).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (206).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (206).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (207).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (207).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (208).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (208).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (209).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (209).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (21).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (21).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (210).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (210).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (211).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (211).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (212).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (212).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (213).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (213).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (214).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (214).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (215).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (215).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (216).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (216).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (217).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (217).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (218).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (218).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (219).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (219).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (22).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (22).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (220).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (220).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (221).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (221).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (222).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (222).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (223).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (223).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (224).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (224).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (225).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (225).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (226).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (226).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (227).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (227).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (228).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (228).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (229).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (229).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (23).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (23).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (230).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (230).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (231).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (231).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (232).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (232).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (233).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (233).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (234).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (234).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (235).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (235).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (236).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (236).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (237).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (237).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (238).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (238).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (239).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (239).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (24).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (24).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (240).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (240).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (241).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (241).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (242).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (242).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (243).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (243).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (244).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (244).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (25).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (25).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (26).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (26).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (27).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (27).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (28).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (28).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (29).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (29).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (3).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (3).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (30).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (30).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (31).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (31).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (32).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (32).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (33).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (33).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (34).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (34).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (35).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (35).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (36).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (36).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (37).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (37).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (38).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (38).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (39).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (39).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (4).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (4).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (40).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (40).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (41).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (41).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (42).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (42).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (43).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (43).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (44).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (44).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (45).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (45).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (46).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (46).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (47).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (47).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (48).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (48).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (49).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (49).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (5).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (5).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (50).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (50).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (51).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (51).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (52).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (52).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (53).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (53).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (54).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (54).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (55).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (55).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (56).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (56).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (57).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (57).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (58).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (58).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (59).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (59).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (6).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (6).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (60).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (60).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (61).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (61).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (62).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (62).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (63).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (63).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (64).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (64).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (65).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (65).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (66).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (66).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (67).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (67).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (68).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (68).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (69).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (69).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (7).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (7).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (70).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (70).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (71).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (71).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (72).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (72).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (73).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (73).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (74).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (74).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (75).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (75).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (76).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (76).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (77).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (77).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (78).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (78).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (79).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (79).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (8).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (8).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (80).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (80).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (81).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (81).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (82).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (82).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (83).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (83).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (84).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (84).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (85).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (85).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (86).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (86).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (87).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (87).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (88).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (88).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (89).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (89).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (9).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (9).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (90).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (90).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (91).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (91).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (92).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (92).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (93).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (93).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (94).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (94).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (95).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (95).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (96).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (96).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (97).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (97).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (98).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (98).png
--------------------------------------------------------------------------------
/.gitbook/assets/image (99).png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image (99).png
--------------------------------------------------------------------------------
/.gitbook/assets/image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AnyStudy/PHP-7-Real-World-Application-Development/3a309164d354f61bfe9206be6bcabf813a195e45/.gitbook/assets/image.png
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 前言
2 |
3 | ## PHP 7:真实世界的应用开发(中文翻译)
4 |
5 | * 作者:[Doug Bierer](https://learning.oreilly.com/search/?query=author%3A%22Doug%20Bierer%22&sort=relevance&highlight=true), [Altaf Hussain](https://learning.oreilly.com/search/?query=author%3A%22Altaf%20Hussain%22&sort=relevance&highlight=true), [Branko Ajzele](https://learning.oreilly.com/search/?query=author%3A%22Branko%20Ajzele%22&sort=relevance&highlight=true)
6 | * 原书名称:《[PHP 7: Real World Application Development](https://www.packtpub.com/php-7-real-world-application-development)》
7 | * 译者:金弘扬([ganymedenil@gmail.com](mailto:ganymedenil@gmail.com))
8 | * Gitbook地址:[PHP 7:真实世界的应用开发](https://ganymedenil.gitbook.io/php-7/)
9 | * github:[https://github.com/AnyStudy/PHP-7-Real-World-Application-Development](https://github.com/AnyStudy/PHP-7-Real-World-Application-Development)
10 |
11 | 推荐使用 Gitbook 以获取最佳阅读体验。
12 |
13 | ## 译序
14 |
15 | 作为一个使用了php多年的程序员,公司项目也经历过5到7的升级,期间项目也出现过一些因为php7功能与php5 不一致导致的bug。我一直在寻找一本能详细介绍 php 7 新特性与功能的书,后来找到了这本,虽然这本书发布到现在已经差不多4年了,但是对于想详细了解php7的朋友来说里面所讲述的内容我认为还是很有价值的。并且本书作者的一些观点我也非常认同,就想着希望能让更多人看到,趁着十一假期有时间想试着翻译一下本书。本书实际是三本独立的书,但如果单独看这三本都感觉缺点什么,把这三本书合并为一本我感觉就很相辅相成。本书的模块2也就是《高性能 php 7》部分已经由吕毅老师翻译,本人就不再对本模块进行翻译。如果我的翻译能帮助到大家,也是我最大到荣幸。
16 |
17 | ## 前言
18 |
19 | PHP 7 在开源社区掀起了一场风暴,它打破了之前版本的速度记录,也重新引起了人们对它的关注。从最根本的意义上讲,核心工程团队已经对它进行了重大重写,但仍能保持高度的向后兼容性。PHP是一门开发Web应用的好语言。它本质上是一类服务器端脚本语言,也用于通用编程。PHP 7是最新的版本,提供了主要的向后兼容性突破,并专注于提高性能和速度。这意味着你可以通过多线程网络服务器,用低成本的硬件和服务器维持网站的高流量。
20 |
21 | ### 这条学习之路都涵盖了什么
22 |
23 | 模块1,PHP 7 编程指南,本模块以 PHP 7 为中心,展示了中高级的PHP技术。每个示例都是为了解决像您这样的 PHP 开发人员每天面临的实际问题。其中还介绍了只有在 PHP 7 中才有的,新的编写 PHP 代码的方法。此外,我们还讨论了向后兼容性中断的问题,并为您提供了大量指导,告诉您何时何地需要修改 PHP 5 代码,以便在 PHP 7 下运行时产生正确的结果。本模块还包含了最新的 PHP 7.x 特性。在本模块结束时,您将具备为您的网站和企业提供高效应用程序所需的工具和技能。
24 |
25 | 模块2,学习 PHP 7 高性能,该模块是 PHP 7 的快速入门,这将提高您的生产力和编码技能。所涉及的概念将使您作为一个PHP程序员,提高你的应用程序的性能标准。我们将向您介绍 PHP 7 中的新特性,然后介绍 PHP 7 中面向对象编程(OOP)的概念。接下来,我们将阐明如何提高 PHP 7 应用程序的性能和数据库性能。通过这个模块,您将能够使用模块中讨论的各种基准测试工具来提高程序的性能。最后,模块讨论了 PHP 编程中的一些最佳实践,以帮助你提高代码的质量。
26 |
27 | 模块3,用 PHP 7 更新旧版应用程序,此模块将向您展示如何通过提取和替换旧版组件,从实践和技术上而不是在使用框架和库之类的工具方面对应用程序进行升级。 我们将采用循序渐进的方法,有条不紊地缓慢前进,从根本上改善您的应用程序。我们将向您展示依赖注入是如何替换新的和全局依赖的。我们还将向您展示如何将表示逻辑改为视图文件,将动作逻辑改为控制器。此外,我们将使您的应用程序始终保持运行状态。在这个过程中,每一个完成的步骤都会让您的代码库以更高的质量完全正常运行。当我们完成后,您将能够像风一样轻而易举地通过您的代码。您的代码将是自动加载、依赖注入、单元测试、层级分离和前端控制。我们将添加到您的应用程序中的大多数非常有限的代码都是针对这个模块的。我们将以程序员的身份提高自己,并提高传统应用程序的质量。
28 |
29 | ### 你在这条学习之路上需要什么
30 |
31 | #### 模块1
32 |
33 | 要成功地实现本模块中介绍的示例,你只需要一台计算机,100MB 的额外磁盘空间,和一个文本或代码编辑器(不是文字处理器!)。第一章将介绍如何设置 PHP 7 开发环境。拥有一个 Web 服务器是可选的,因为 PHP 7 包含一个开发 Web 服务器。不需 Internet 连接,但下载代码(如 PSR-7 接口集)和查看 PHP 7.x 文档可能会需要。
34 |
35 | #### 模块2
36 |
37 | 任何符合运行以下软件最新版本的硬件规格,应该都足以通过本模块。
38 |
39 | * 操作系统: Debian 或 Ubuntu
40 | * 软件: NGINX、PHP 7、 MySQL、 PerconaDB、 Redis、 Memcached、 Xdebug、Apache JMeter、 ApacheBench、Siege 和 Git
41 |
42 | #### 模块3
43 |
44 | 您需要参考本模块的“第二章,先决条件“来了解本模块所需的基本硬件和软件要求。本章将详细描述这些要求。
45 |
46 | ### 这条路是为谁而设
47 |
48 | 如果您是一个有抱负的Web开发人员,移动应用开发人员或后端程序员,并且具有PHP编程的基本经验并希望开发对性能至关重要的应用程序,那么这个课程是为你准备的。它将使您的PHP编程技能更上一层楼。
49 |
50 | ### 支持
51 |
52 | 课程的代码包也托管在github上 [https://GitHub.com/packtpublishing/php-7-be-pro-at-applications-development](https://GitHub.com/packtpublishing/php-7-be-pro-at-applications-development) 。
53 |
54 | ## 法律申明
55 |
56 | 译者纯粹出于**学习目的**与**个人兴趣**翻译本书,不追求任何经济利益。
57 |
58 | 译者保留对此版本译文的署名权,其他权利以原作者和出版社的主张为准。
59 |
60 | 本译文只供学习研究参考之用,不得公开传播发行或用于商业用途。有能力阅读英文书籍者请购买正版支持。
61 |
62 | ### LICENSE
63 |
64 | CC-BY 4.0
65 |
66 |
67 |
68 |
--------------------------------------------------------------------------------
/mo-kuai-san.md:
--------------------------------------------------------------------------------
1 | # 模块三
2 |
3 |
--------------------------------------------------------------------------------
/mo-kuai-san/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | description: 用PHP 7进行模块化编程
3 | ---
4 |
5 | # 模块三
6 |
7 | 用PHP 7进行模块化编程
8 |
9 | 利用模块化编程的力量来提高代码的可读性、可维护性和可测试性。
10 |
11 |
--------------------------------------------------------------------------------
/mo-kuai-san/gof-she-ji-mo-shi/gai-yao.md:
--------------------------------------------------------------------------------
1 | # 小结
2 |
3 | 设计模式是开发人员的一种通用的高级语言。它们使团队成员之间能够以一种快捷的方式交流应用设计。了解如何识别和实现设计模式,将我们的关注点转移到业务需求解决上,而不是在代码层面上修修补补如何将我们的解决方案粘合在一起。
4 |
5 | 编码,就像大多数手工制作的学科一样,是那种你付出多少就能得到多少的学科。虽然实现一些设计模式需要一定的时间,但在更大的项目上缺乏这样做很可能会在未来以这样或那样的方式赶上我们。与 "是否使用框架 "的争论类似,实现正确的设计模式会影响我们代码的可扩展性、可重用性、适应性和可维护性。因此,使它更具有未来性。
6 |
7 | 向前看,在下一章中,我们将研究SOLID设计原则以及它们在软件开发过程中的作用。
8 |
9 |
--------------------------------------------------------------------------------
/mo-kuai-san/mo-kuai-hua-wang-dian-ying-yong-de-xu-qiu-gui-fan/README.md:
--------------------------------------------------------------------------------
1 | # 模块化网店应用的需求规范
2 |
3 | 从零开始构建一个软件应用程序需要多种技能,因为它不仅仅是写下代码。写下功能需求和勾画线框通常是这个过程中的第一步,特别是当我们正在为客户项目工作时。这些步骤通常是由开发人员以外的人完成的,因为它们需要对客户的商业案例、用户行为等有一定的洞察力。作为一个较大的开发团队的一部分,意味着我们作为开发人员,通常会得到需求、设计和线框,然后根据它们开始编码。自己交付项目,使得我们很想跳过这些步骤,独自开始动手写代码。更多的时候,这是一种没有成效的做法。放下功能需求和几个线框是一个值得了解和遵循的技能,即使自己只是一个开发人员。
4 |
5 | 在本章的后面,我们将介绍一个高级应用需求,以及一个粗略的线框。
6 |
7 | 在本章中,我们将涉及以下主题:
8 |
9 | * 确定应用需求
10 | * 线框设计
11 | * 定义技术栈
12 | * Symfony 框架
13 | * Foundation 框架
14 |
15 | ## 确定应用需求
16 |
17 | 我们需要建立一个简单的,但响应的网店应用程序。为了做到这一点,我们需要列出一些基本需求。目前我们感兴趣的需求类型是那些触及用户和系统之间的交互的需求。在用户使用方面,指定需求的两种最常见的技术是用例和用户故事。用户故事是一种不那么正式但足够描述性的方式来概述这些需求。使用用户故事,我们封装了这里提到的客户和店长的行动。
18 |
19 | 客户应该能够做到以下几点:
20 |
21 | * 浏览静态信息页面(关于我们,客户服务)
22 | * 通过联系表格与店主取得联系
23 | * 浏览店铺类别
24 | * 查看产品详情(价格、说明)
25 | * 查看产品图片的大视图(放大)
26 | * 查看正在销售的商品
27 | * 查看畅销产品
28 | * 将产品添加到购物车中
29 | * 创建一个客户账户
30 | * 更新客户账户信息
31 | * 找回丢失的密码
32 | * 结账
33 | * 查看订单总成本
34 | * 在几种付款方式中选择
35 | * 在几种运输方式中选择
36 | * 下单后收到电子邮件通知
37 | * 检查订单状态
38 | * 取消订单
39 | * 查看订单历史
40 |
41 | 一个店长应该能够做到以下几点:
42 |
43 | * 创建一个产品(至少有以下属性:标题、价格、sku、url-key、描述、数量、类别和图片)
44 | * 上传产品图片
45 | * 更新和删除产品
46 | * 创建一个类别(至少有以下属性:标题、url-key、描述和图片)
47 | * 上传图片到一个类别
48 | * 更新和删除一个类别
49 | * 如果有新的销售订单被创建,会收到通知
50 | * 如果有新的销售订单被取消,会收到通知
51 | * 按状态查看现有销售订单
52 | * 更新订单状态
53 | * 停用客户账户
54 | * 删除客户账户
55 |
56 | 用户故事是记录应用程序需求的便捷高级方法。作为一种敏捷的开发模式,尤其有用。
57 |
58 |
--------------------------------------------------------------------------------
/mo-kuai-san/mo-kuai-hua-wang-dian-ying-yong-de-xu-qiu-gui-fan/ding-yi-ji-shu-zhan.md:
--------------------------------------------------------------------------------
1 | # 定义技术栈
2 |
3 | 一旦需求和线框设定好了,我们就可以把注意力集中到技术栈的选择上。在第1章,生态系统概述中,我们简要介绍了几个最流行的PHP框架,指出了它们的优势。在这种情况下,选择合适的框架更多的是一个偏好的问题,因为大多数应用需求可以很容易地通过这些框架中的任何一个来满足。然而,我们的选择是Symfony。除了PHP框架之外,我们仍然需要一个CSS框架来在客户端的浏览器内提供一些结构、样式和响应性。由于本书的重点是PHP技术,所以我们就选择Foundation CSS框架来完成这个任务吧。
4 |
5 | ## Symfony 框架
6 |
7 | Symfony框架对我们的应用来说是一个不错的选择。它是一个企业级的框架,已经存在了很多年,并且有非常好的文档和支持。它可以从官方的[http://symfony.com](http://symfony.com) 页面下载,如图所示。
8 |
9 | 
10 |
11 | 使用Symfony作为我们技术栈的好处有很多。该框架提供了强大和完善的文档。
12 |
13 | * 控制器
14 | * 路由
15 | * ORM\(通过 Doctrine\)
16 | * 表单
17 | * 验证
18 | * 安全
19 |
20 | 这些都是我们应用所需要的基本功能。尤其是ORM,在快速开发应用的过程中起到了重要的作用。不用担心编码的问题,CRUD的每一个环节都能让开发速度提升一到两个百分点。在这方面,Symfony的伟大之处在于,它可以通过执行以下两个简单的命令,自动生成实体和围绕实体的CRUD动作。
21 |
22 | ```bash
23 | php bin/console doctrine:generate:entity
24 | php app/console generate:doctrine:crud
25 | ```
26 |
27 | 通过这样做,Symfony生成实体模型和必要的控制器,使我们能够执行以下操作。
28 |
29 | * 列出所有记录
30 | * 展示一条通过主键查询的记录
31 | * 创建一个新记录
32 | * 编辑现有记录
33 | * 删除现有记录
34 |
35 | 基本上,我们免费得到了一个最小的店长界面。仅此一项就涵盖了店长角色设置的大部分CRUD相关需求。然后,我们可以轻松地修改生成的模板,进一步整合其余功能。
36 |
37 | 除此之外,安全组件还提供了认证和授权,我们可以用来满足客户和店长的登录。所以,店长将是一个固定的、预先创建的用户,连接在Symfony的防火墙上,是唯一一个可以访问CRUD控制器操作的用户。
38 |
39 | ## Foundation 框架
40 |
41 | 在Zurb公司的支持下,Foundation框架为现代响应式Web应用做了一个很好的选择。我们可以说它是一个企业级框架,提供了一个HTML、CSS和JavaScript的集合,我们可以在此基础上进行构建。它可以从官方的[http://foundation.zurb.com](http://foundation.zurb.com) 页面下载,如图所示。
42 |
43 | 
44 |
45 | Foundation 提供了三种使用场景的支持:
46 |
47 | * Foundation for sites
48 | * Foundation for e-mail
49 | * Foundation for apps
50 |
51 | 我们感兴趣的是网站版本。除了一般的样式,Foundation for sites还提供了大量的控件、导航元素、容器、媒体元素和插件。这些在我们的应用中会特别有用,比如标题菜单、分类产品列表、响应式购物车表格等等。
52 |
53 | Foundation是作为一个移动优先的框架而构建的,我们首先为小屏幕编写代码,然后在大屏幕上继承这些风格。它默认的12列网格系统使我们能够快速、轻松地创建强大的多设备布局。
54 |
55 | 我们将简单地使用Foundation来为我们的应用程序提供结构、一些基本的样式和响应能力,而不需要自己编写一行CSS。仅此一点,就能让我们的应用在视觉上有足够的美感,在移动和桌面屏幕上都能使用,同时我们的大部分编码技能仍然集中在后端事物上。
56 |
57 | 除了提供强大的功能外,Foundation背后的公司还提供了优质的技术支持。虽然作为本书的一部分,我们不会需要它,但这些东西在选择应用框架时建立了信心。
58 |
59 |
--------------------------------------------------------------------------------
/mo-kuai-san/mo-kuai-hua-wang-dian-ying-yong-de-xu-qiu-gui-fan/gai-yao.md:
--------------------------------------------------------------------------------
1 | # 小结
2 |
3 | 创建网络应用程序是一项繁琐而耗时的任务,网络商店可能是最强大和最密集的应用类型之一,因为它们包含了大量的功能。在交付最终产品的过程中涉及到许多组件;从数据库、服务器端(PHP)代码到客户端(HTML、CSS和JavaScript)代码。在本章中,我们首先定义了一些基本的用户故事,进而定义了我们的小型网络商店的高级应用需求。在其中加入线框图,帮助我们将面向客户的界面可视化,而店长界面则要由框架提供开箱即用。
4 |
5 | 我们进一步光顾了两个最流行的支持模块化应用设计的框架。我们将注意力转向了作为服务器端技术的Symfony和作为客户端响应式框架的Foundation。
6 |
7 | 往后,在下一章中,我们将更深入地了解Symfony。除了是一套可重用的组件外,Symfony也是最强大和最流行的全栈PHP框架之一。因此,它是快速开发Web应用的一个有趣的选择。
8 |
9 |
--------------------------------------------------------------------------------
/mo-kuai-san/mo-kuai-hua-wang-dian-ying-yong-de-xu-qiu-gui-fan/xian-kuang-she-ji.md:
--------------------------------------------------------------------------------
1 | # 线框设计
2 |
3 | 有了用户故事的铺垫,让我们把重点转移到实际的线框设计上来。出于我们稍后会讲到的原因,我们的线框工作将围绕客户的角度进行。
4 |
5 | 目前有很多线框工具,有免费的也有商业的。一些商业工具,如https://ninjamock.com,我们将在我们的例子中使用,仍然提供免费计划。这对于个人项目来说是非常方便的,因为它为我们节省了很多时间。
6 |
7 | 每一个网络应用的起点都是它的主页。下面的线框说明了我们网店应用的主页。
8 |
9 | 
10 |
11 | 在这里我们可以看到决定页面结构的几个部分。头部由logo、分类菜单和用户菜单组成。需求中没有提到任何关于类别结构的内容,而我们正在构建一个简单的网店应用,所以我们将坚持使用扁平化的类别结构,没有任何子类别。用户菜单最初将显示注册和登录链接,直到用户真正登录,在这种情况下,菜单将发生变化,如以下线框所示。内容区域充满了畅销商品和促销商品,每个商品都定义了图片、标题、价格和添加到购物车按钮。页脚区域包含了大部分静态内容页面的链接,以及一个联系我们页面。
12 |
13 | 下面的线框说明了我们网店应用的分类页面。
14 |
15 | 
16 |
17 | 整个网站的页眉和页脚区域在概念上保持不变。内容区域现在已改为列出任何给定类别内的产品。单个产品区域的呈现方式与主页上相同。类别名称和图片呈现在产品列表上方。类别图片的宽度给出了一些提示,说明我们应该准备什么类型的图片并上传到我们的类别中。
18 |
19 | 下面的线框说明了我们网店应用的产品页面。
20 |
21 | 
22 |
23 | 现在,这里的内容区域改变为列出单个产品信息。我们可以看到一个大的图片占位符、标题、sku、库存状态、价格、数量字段、添加到购物车按钮和产品描述正在呈现。当商品可以购买时,要显示IN STOCK信息,当商品不再有货时,要显示OUT OF STOCK信息。这要和产品数量属性相关。我们还需要牢记 "以大视角(缩放)查看产品图片 "的要求,点击图片会放大图片。
24 |
25 | 下面的线框说明了我们网店应用的注册页面。
26 |
27 | 
28 |
29 | 现在这里的内容区会改变,呈现一个注册表。我们有很多方法可以实现注册系统。更多的时候,在注册屏幕上询问的信息量是最小的,因为我们想让用户尽快进入。然而,让我们在注册屏幕上尝试获取更完整的用户信息。我们不仅要求用户提供电子邮件和密码,还要求用户提供整个地址信息。
30 |
31 | 下面的线框说明了我们网店应用的登录页面。
32 |
33 | 
34 |
35 | 现在这里的内容区域改变为呈现客户登录和忘记密码的表单。我们为用户提供登录时的Email和密码字段,或者在密码重置操作时只提供Email字段。
36 |
37 | 下面的线框说明了我们网店应用的客户账户页面。
38 |
39 | 
40 |
41 | 现在这里的内容区域变为呈现客户账户区域,只有登录的客户才能看到。在这里我们看到一个屏幕,主要有两个信息。客户信息是一个,订单历史是另一个。客户可以在这个屏幕上修改自己的邮箱、密码等地址信息。此外,客户还可以查看、取消、打印之前的所有订单。我的订单表从上到下,从最新到最旧列出订单。虽然用户故事没有指定,但订单取消应该只对待定订单有效。这一点我们会在后面详细介绍。
42 |
43 | 这也是用户登录时显示用户菜单状态的第一屏。我们可以看到一个下拉菜单,显示了用户的全名、我的账户和注销链接。就在它的旁边,我们有购物车(%s)链接,这是为了列出购物车中的确切数量。
44 |
45 | 下面的线框说明了我们的网店应用的结账购物车页面。
46 |
47 | 
48 |
49 | 现在这里的内容区域会改变,以呈现购物车的当前状态。如果客户在购物车中添加了任何产品,它们将在这里列出。每个项目应该列出产品的标题、单个价格、添加的数量和小计。顾客应该能够改变数量,并按更新购物车按钮来更新购物车的状态。如果提供的数量为0,点击更新购物车按钮将从购物车中删除该商品。购物车的数量应该在任何时候都反映出标题菜单购物车(%s)链接的状态。屏幕的右侧显示了当前订单总价值的快速摘要,旁边还有一个大而清晰的 "去结账 "按钮。
50 |
51 | 下面的线框说明了我们的网店应用的结账购物车发货页面。
52 |
53 | 
54 |
55 | 这里的内容区域现在改变为呈现结账过程的第一步,即收集运输信息。未登录的客户应该无法访问此屏幕。客户可以在这里向我们提供他们的地址详细信息,同时选择送货方式。送货方式区域列出了几种送货方式。在右侧,显示了可折叠的订单摘要部分,列出了当前购物车中的项目。在它的下方,我们有购物车的小计值和一个大大的清晰的下一步按钮。只有在提供了所有所需信息后,下一步按钮才会触发,在这种情况下,它应该把我们带到结账车付款页面的付款信息。
56 |
57 | 下面的线框说明了我们的网店应用的结账车支付页面。
58 |
59 | 
60 |
61 | 这里的内容区域现在改变为呈现结账流程的第二步,即付款信息收集。未登录的客户不应访问此屏幕。客户会看到一个可用的支付方式列表。为了应用的简单性,我们将只关注统一/固定的支付方式,而不是像PayPal或Stripe这样的强大支付方式。在屏幕的右侧,我们可以看到一个可折叠的订单摘要部分,列出购物车中的当前项目。在它的下方,我们有订单总数部分,分别列出了购物车小计、标准送货、订单总数,以及一个大大的清晰的下单按钮。只有在提供了所有所需信息的情况下,下单按钮才会触发,在这种情况下,它应该把我们带到结账成功的页面。
62 |
63 | 下面的线框说明了我们的网络商店应用程序的结账成功页面。
64 |
65 | 
66 |
67 | 现在这里的内容区域会改变,输出结账成功的信息。显然,这个页面只有刚刚完成结账过程的登录客户才能看到。订单号是可以点击的,并链接到 "我的账户 "区域,关注具体订单。到了这个页面,客户和店长都应该会收到一封通知邮件,按照订单下达后获得邮件通知和如果新的销售订单已经创建就会被通知的要求。
68 |
69 | 到此,我们面向客户的线框就结束了。
70 |
71 | 关于店长用户故事需求,我们暂时只定义一个登陆管理界面,如下截图所示。
72 |
73 | 
74 |
75 | 后面使用框架,我们将得到一个完整的自动生成的CRUD接口,用于多个Add New和List & Manage链接。对这个界面及其链接的访问将由框架的安全组件控制,因为这个用户不会是客户或数据库中的任何用户。
76 |
77 | 此外,在下面的章节中,我们将把我们的应用程序分成几个模块。在这样的设置中,每个模块将拥有单独的功能,负责客户、目录、结账和其他需求。
78 |
79 |
--------------------------------------------------------------------------------
/mo-kuai-san/solid-she-ji-yuan-ze/README.md:
--------------------------------------------------------------------------------
1 | # SOLID 设计原则
2 |
3 | 构建模块化软件需要很强的类设计知识。有很多指南,涉及到我们对类的命名方式,类应该有多少个变量,方法的大小应该是多少等等。PHP生态系统设法将这些打包成了官方的PSR标准,更准确地说,是**PSR-1:基本编码标准**和**PSR-2:编码风格指南**。这些都是一般的编程指南,让我们的代码可读、可理解、可维护。
4 |
5 | 除了编程指南外,在类设计过程中,我们还可以应用更具体的设计原则。关于解决低耦合、高内聚和强封装的概念。我们把它们称为SOLID设计原则,这个术语是Robert Cecil Martin在2000年初创造的。
6 |
7 | SOLID是以下五个原则的缩写:
8 |
9 | * S:单一职责原则\(SRP\)
10 | * O:开闭原则\(OCP\)
11 | * L:里氏替换原则\(LSP\)
12 | * I: 接口隔离原则\(ISP\)
13 | * D:依赖反转原则\(DIP\)
14 |
15 | SOLID原则的概念已经有十多年的历史了,但它远远没有过时,因为它们是好的类设计的核心。在本章中,我们将研究这些原则中的每一条,通过观察一些明显违反原则的行为来了解它们。
16 |
17 | 在本章中,我们将涉及以下主题:
18 |
19 | * 单一职责原则
20 | * 开闭原则
21 | * 里氏替换原则
22 | * 接口隔离原则
23 | * 依赖反转原则
24 |
25 | ## 单一职责原则
26 |
27 | 单一职责原则处理的是试图做得太多的类。这里的职责是指改变的原因。按照罗伯特-C-马丁的定义。
28 |
29 | > _一个类仅有一个引起它变化的原因_
30 |
31 | 下面是一个违反SRP的类的例子:
32 |
33 | ```php
34 | class Ticket {
35 | const SEVERITY_LOW = 'low';
36 | const SEVERITY_HIGH = 'high';
37 | // ...
38 | protected $title;
39 | protected $severity;
40 | protected $status;
41 | protected $conn;
42 |
43 | public function __construct(\PDO $conn) {
44 | $this->conn = $conn;
45 | }
46 |
47 | public function setTitle($title) {
48 | $this->title = $title;
49 | }
50 |
51 | public function setSeverity($severity) {
52 | $this->severity = $severity;
53 | }
54 |
55 | public function setStatus($status) {
56 | $this->status = $status;
57 | }
58 |
59 | private function validate() {
60 | // Implementation...
61 | }
62 |
63 | public function save() {
64 | if ($this->validate()) {
65 | // Implementation...
66 | }
67 | }
68 |
69 | }
70 |
71 | // Client
72 | $conn = new PDO(/* ... */);
73 | $ticket = new Ticket($conn);
74 | $ticket->setTitle('Checkout not working!');
75 | $ticket->setStatus(Ticket::STATUS_OPEN);
76 | $ticket->setSeverity(Ticket::SEVERITY_HIGH);
77 | $ticket->save();
78 | ```
79 |
80 | `Ticket`类处理的是 `ticket` 实体的验证和保存到数据库。这两个职责是它改变的两个原因。每当关于票据验证,或者关于票据保存的需求发生变化时,就必须修改`Ticket` 类。为了解决这里的SRP违规,我们可以使用辅助类和接口来分割职责。
81 |
82 | 下面是一个重构后的实现实例,符合SRP的要求。
83 |
84 | ```php
85 | interface KeyValuePersistentMembers {
86 | public function toArray();
87 | }
88 |
89 | class Ticket implements KeyValuePersistentMembers {
90 | const STATUS_OPEN = 'open';
91 | const SEVERITY_HIGH = 'high';
92 | //...
93 | protected $title;
94 | protected $severity;
95 | protected $status;
96 |
97 | public function setTitle($title) {
98 | $this->title = $title;
99 | }
100 |
101 | public function setSeverity($severity) {
102 | $this->severity = $severity;
103 | }
104 |
105 | public function setStatus($status) {
106 | $this->status = $status;
107 | }
108 |
109 | public function toArray() {
110 | // Implementation...
111 | }
112 | }
113 |
114 | class EntityManager {
115 | protected $conn;
116 |
117 | public function __construct(\PDO $conn) {
118 | $this->conn = $conn;
119 | }
120 |
121 | public function save(KeyValuePersistentMembers $entity)
122 | {
123 | // Implementation...
124 | }
125 | }
126 |
127 | class Validator {
128 | public function validate(KeyValuePersistentMembers $entity) {
129 | // Implementation...
130 | }
131 | }
132 |
133 | // Client
134 | $conn = new PDO(/* ... */);
135 |
136 | $ticket = new Ticket();
137 | $ticket->setTitle('Payment not working!');
138 | $ticket->setStatus(Ticket::STATUS_OPEN);
139 | $ticket->setSeverity(Ticket::SEVERITY_HIGH);
140 |
141 | $validator = new Validator();
142 |
143 | if ($validator->validate($ticket)) {
144 | $entityManager = new EntityManager($conn);
145 | $entityManager->save($ticket);
146 | }
147 | ```
148 |
149 | 在这里,我们引入了一个简单的`KeyValuePersistentMembers`接口,它只有一个`toArray`方法,然后与`EntityManager`和`Validator`类一起使用,现在这两个类都只承担一个职责。`Ticket`类变成了一个简单的数据持有模型,而客户端现在控制实例化、验证和保存为三个不同的步骤。虽然这肯定不是如何分离职责的通用公式,但它确实提供了一个简单而清晰的例子。
150 |
151 | 以单一职责原则为前提进行设计,可以产生更小的类,具有更高的可读性和更容易测试代码。
152 |
153 |
--------------------------------------------------------------------------------
/mo-kuai-san/solid-she-ji-yuan-ze/gai-yao.md:
--------------------------------------------------------------------------------
1 | # 小结
2 |
3 | 谈到模块化开发,可扩展性是需要不断思考的问题。如果编写的代码把自己锁死,很可能导致将来无法与其他项目或库集成。虽然SOLID设计原则对于某些部分来说可能显得有些过激,但积极应用这些原则很可能会带来易于维护和长期扩展的组件。
4 |
5 | 拥抱SOLID原则进行类设计,为我们的代码为未来的变化做好准备。它通过在我们的类中本地化和最小化这些变化来做到这一点,因此任何使用它的集成都不会感受到特别大的变化。
6 |
7 | 今后,在下一章中,我们将研究定义我们的应用规范,我们将在所有其他章节中建立这个规范。
8 |
9 |
--------------------------------------------------------------------------------
/mo-kuai-san/solid-she-ji-yuan-ze/jie-kou-ge-li-yuan-ze.md:
--------------------------------------------------------------------------------
1 | # 接口隔离原则
2 |
3 | 接口隔离原则指出,客户应该只实现他们实际使用的接口。他们不应该被强迫实现他们不使用的接口。根据维基百科上的定义:
4 |
5 | > _多个客户端专用接口比一个通用接口要好_
6 |
7 | 这意味着,我们应该把大而肥的接口分成若干个小而轻的接口,把它隔离开来,让小的接口以方法组为基础,每个方法服务于一个特定的功能。
8 |
9 | 我们来看看下面这个违反ISP的例子:
10 |
11 | ```php
12 | interface Appliance {
13 | public function powerOn();
14 | public function powerOff();
15 | public function bake();
16 | public function mix();
17 | public function wash();
18 |
19 | }
20 |
21 | class Oven implements Appliance {
22 | public function powerOn() { /* Implement ... */ }
23 | public function powerOff() { /* Implement ... */ }
24 | public function bake() { /* Implement... */ }
25 | public function mix() { /* Nothing to implement ... */ }
26 | public function wash() { /* Cannot implement... */ }
27 | }
28 |
29 | class Mixer implements Appliance {
30 | public function powerOn() { /* Implement... */ }
31 | public function powerOff() { /* Implement... */ }
32 | public function bake() { /* Cannot implement... */ }
33 | public function mix() { /* Implement... */ }
34 | public function wash() { /* Cannot implement... */ }
35 | }
36 |
37 | class WashingMachine implements Appliance {
38 | public function powerOn() { /* Implement... */ }
39 | public function powerOff() { /* Implement... */ }
40 | public function bake() { /* Cannot implement... */ }
41 | public function mix() { /* Cannot implement... */ }
42 | public function wash() { /* Implement... */ }
43 | }
44 | ```
45 |
46 | 在这里,我们有一个接口为几个设备相关的方法设置需求。然后我们有几个类实现这个接口。问题很明显,不是所有的家电都能挤进同一个接口。对于一台洗衣机来说,强迫它实现烘烤和混合方法是没有意义的。这些方法需要各自拆分到自己的接口中。这样具体的家电类就只能实现真正有意义的方法。
47 |
48 |
--------------------------------------------------------------------------------
/mo-kuai-san/solid-she-ji-yuan-ze/kai-bi-yuan-ze.md:
--------------------------------------------------------------------------------
1 | # 开闭原则
2 |
3 | 开闭原则根据维基百科上的定义,一个类的扩展应该是开放的,但修改应该是封闭的。
4 |
5 | > _软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的_
6 |
7 | 开放的扩展部分意味着我们应该设计我们的类,以便在需要时可以添加新的功能。封闭的修改部分是指这个新功能应该适合在不修改原类的情况下使用。只有在修复bug的情况下才应该修改类,而不是为了增加新功能。
8 |
9 | 下面是一个违反开闭原则的类的例子:
10 |
11 | ```php
12 | class CsvExporter {
13 | public function export($data) {
14 | // Implementation...
15 | }
16 | }
17 |
18 | class XmlExporter {
19 | public function export($data) {
20 | // Implementation...
21 | }
22 | }
23 |
24 | class GenericExporter {
25 | public function exportToFormat($data, $format) {
26 | if ('csv' === $format) {
27 | $exporter = new CsvExporter();
28 | } elseif ('xml' === $format) {
29 | $exporter = new XmlExporter();
30 | } else {
31 | throw new \Exception('Unknown export format!');
32 | }
33 | return $exporter->export($data);
34 | }
35 | }
36 | ```
37 |
38 | 在这里,我们有两个具体的类,`CsvExporter`和`XmlExporter`,每个类都有一个职责。然后我们有一个`GenericExporter`,它的`exportToFormat`方法实际上是在一个适当的实例类型上触发导出函数。这里的问题是,我们不能在不修改`GenericExporter`类的情况下,增加一个新的类型`exporter`。换句话说,`GenericExporter`不开放扩展,封闭修改。
39 |
40 | 下面是一个重构后的实现例子,它符合OCP的要求:
41 |
42 | ```php
43 | interface ExporterFactoryInterface {
44 | public function buildForFormat($format);
45 | }
46 |
47 | interface ExporterInterface {
48 | public function export($data);
49 | }
50 |
51 | class CsvExporter implements ExporterInterface {
52 | public function export($data) {
53 | // Implementation...
54 | }
55 | }
56 |
57 | class XmlExporter implements ExporterInterface {
58 | public function export($data) {
59 | // Implementation...
60 | }
61 | }
62 |
63 | class ExporterFactory implements ExporterFactoryInterface {
64 | private $factories = array();
65 |
66 | public function addExporterFactory($format, callable $factory) {
67 | $this->factories[$format] = $factory;
68 | }
69 |
70 | public function buildForFormat($format) {
71 | $factory = $this->factories[$format];
72 | $exporter = $factory(); // the factory is a callable
73 |
74 | return $exporter;
75 | }
76 | }
77 |
78 | class GenericExporter {
79 | private $exporterFactory;
80 |
81 | public function __construct(ExporterFactoryInterface $exporterFactory) {
82 | $this->exporterFactory = $exporterFactory;
83 | }
84 |
85 | public function exportToFormat($data, $format) {
86 | $exporter = $this->exporterFactory->buildForFormat($format);
87 | return $exporter->export($data);
88 | }
89 | }
90 |
91 | // Client
92 | $exporterFactory = new ExporterFactory();
93 |
94 | $exporterFactory->addExporterFactory(
95 | 'xml',
96 | function () {
97 | return new XmlExporter();
98 | }
99 | );
100 |
101 | $exporterFactory->addExporterFactory(
102 | 'csv',
103 | function () {
104 | return new CsvExporter();
105 | }
106 | );
107 |
108 | $data = array(/* ... some export data ... */);
109 | $genericExporter = new GenericExporter($exporterFactory);
110 | $csvEncodedData = $genericExporter->exportToFormat($data, 'csv');
111 | ```
112 |
113 | 这里我们添加了两个接口,`ExporterFactoryInterface`和`ExporterInterface`。然后我们修改`CsvExporter`和`XmlExporter`,实现该接口。添加了`ExporterFactory`,实现了`ExporterFactoryInterface`。它的主要作用是由`buildForFormat`方法定义的,该方法作为回调函数返回`exporter`。最后,重写了`GenericExporter`,通过它的构造函数接受`ExporterFactoryInterface`,它的`exportToFormat`方法现在通过使用`exporter`工厂来构建`exporter`,并调用其上的`execute`方法。
114 |
115 | 现在,客户端本身已经发挥了更强大的作用,它首先实例化`ExporterFactory`,并向其添加两个导出器,然后再将其传递给`GenericExporter`。现在向`GenericExporte`r添加一个新的导出格式,不再需要修改它,因为它的扩展是开放的,而修改是封闭的。同样,这绝不是一个通用的公式,而是一个满足OCP的可能方法的概念。
116 |
117 |
--------------------------------------------------------------------------------
/mo-kuai-san/solid-she-ji-yuan-ze/li-shi-ti-huan-yuan-ze.md:
--------------------------------------------------------------------------------
1 | # 里氏替换原则
2 |
3 | 里氏替换原则说的是继承。它规定了我们应该如何设计我们的类,使客户的依赖性可以被子类所取代,而客户却看不出其中的差别,这是在维基百科上找到的定义。
4 |
5 | > _程序中的对象应该可以用它们的子类的实例来替换,而不改变程序的正确性_
6 |
7 | 虽然子类可能会添加一些特定的功能,但它必须符合与基类相同的行为。否则就违反了里氏原则。
8 |
9 | 谈到PHP和子类,我们要超越简单的具体类,要区分:具体类、抽象类和接口。三者中的每一个都可以放在基类中,而一切扩展或实现基类的东西都可以看成是派生类。
10 |
11 | 下面是一个违反LSP的例子,派生类没有对所有方法进行实现。
12 |
13 | ```php
14 | interface User {
15 | public function getEmail();
16 | public function getName();
17 | public function getAge();
18 | }
19 |
20 | class Employee implements User {
21 | public function getEmail() {
22 | // Implementation...
23 | }
24 |
25 | public function getAge() {
26 | // Implementation...
27 | }
28 | }
29 | ```
30 |
31 | 在这里,我们看到一个 `Employee` 类没有实现接口`getName`方法。我们可以很容易地使用一个抽象类来代替接口和抽象方法类来实现`getName`方法,效果是一样的。幸运的是,在这种情况下,PHP会抛出一个错误,警告我们还没有真正完全实现接口。
32 |
33 | 下面是一个违反里氏原则的例子,不同的派生类返回不同的类型:
34 |
35 | ```php
36 | class UsersCollection implements \Iterator {
37 | // Implementation...
38 | }
39 |
40 | interface UserList {
41 | public function getUsers();
42 | }
43 |
44 | class Emloyees implements UserList {
45 | public function getUsers() {
46 | $users = new UsersCollection();
47 | //...
48 | return $users;
49 | }
50 | }
51 |
52 | class Directors implements UserList {
53 | public function getUsers() {
54 | $users = array();
55 | //...
56 | return $users;
57 | }
58 | }
59 | ```
60 |
61 | 这里我们看到一个简单的边缘案例。在两个派生类上调用`getUsers`会返回一个我们可以循环的结果。然而,PHP开发人员更倾向于在数组结构上使用`count`方法。在当前的`Employees`实例上使用它,`getUsers`的结果将无法工作。这是因为 `Employees` 类返回的是实现 `Iterator` 的 `UsersCollection`,而不是实际的数组结构。由于`UsersCollection`没有实现`Countable`,所以我们不能对它使用`count`,这就会导致潜在的bug。
62 |
63 | 我们还可以进一步发现派生类在方法参数方面表现不那么宽容的情况下的LSP违规行为。通常可以通过使用类型操作符的实例来发现这些情况,如下例所示:
64 |
65 | ```php
66 | interface LoggerProcessor {
67 | public function log(LoggerInterface $logger);
68 | }
69 |
70 | class XmlLogger implements LoggerInterface {
71 | // Implementation...
72 | }
73 |
74 | class JsonLogger implements LoggerInterface {
75 | // Implementation...
76 | }
77 |
78 | class FileLogger implements LoggerInterface {
79 | // Implementation...
80 | }
81 |
82 | class Processor implements LoggerProcessor {
83 | public function log(LoggerInterface $logger) {
84 | if ($logger instanceof XmlLogger) {
85 | throw new \Exception('This processor does not work with XmlLogger');
86 | } else {
87 | // Implementation...
88 | }
89 | }
90 | }
91 | ```
92 |
93 | 这里,派生类`Processor`对方法参数进行了限制,而它应该接受一切符合`LoggerInterface`的参数。通过减少允许性,它改变了基类(在本例中是`LoggerInterface`)所隐含的行为。
94 |
95 | 概述的例子只是构成违反LSP的一个片段。为了满足该原则,我们需要确保派生类不会以任何方式改变基类所施加的行为。
96 |
97 |
--------------------------------------------------------------------------------
/mo-kuai-san/solid-she-ji-yuan-ze/yi-lai-fan-zhuan-yuan-ze.md:
--------------------------------------------------------------------------------
1 | # 依赖反转原则
2 |
3 | 依赖反转原则指出,实体应该依赖于抽象而不是具体实现。也就是说,一个高层次的模块不应该依赖于一个低层次的模块,而应该依赖于抽象。按照在维基百科上找到的定义:
4 |
5 | > _依赖于抽象而不是一个实例_
6 |
7 | 这个原则很重要,因为它对我们的软件解耦起着重要作用。
8 |
9 | 下面是一个违反DIP的类的例子
10 |
11 | ```php
12 | class Mailer {
13 | // Implementation...
14 | }
15 |
16 | class NotifySubscriber {
17 | public function notify($emailTo) {
18 | $mailer = new Mailer();
19 | $mailer->send('Thank you for...', $emailTo);
20 | }
21 | }
22 | ```
23 |
24 | 在这里,我们可以看到`NotifySubscriber`类中的一个`notify`方法以依赖关系的方式编码给`Mailer`类。这就造成了紧耦合的代码,而这正是我们想要避免的。为了纠正这个问题,我们可以通过类构造函数,或者通过其他方法来传递依赖关系。此外,我们应该从具体的类依赖转向抽象的类依赖,如这里所示的整改后的例子所示:
25 |
26 | ```php
27 | interface MailerInterface {
28 | // Implementation...
29 | }
30 |
31 | class Mailer implements MailerInterface {
32 | // Implementation...
33 | }
34 |
35 | class NotifySubscriber {
36 | private $mailer;
37 |
38 | public function __construct(MailerInterface $mailer) {
39 | $this->mailer = $mailer;
40 | }
41 |
42 | public function notify($emailTo) {
43 | $this->mailer->send('Thank you for...', $emailTo);
44 | }
45 | }
46 | ```
47 |
48 | 这里我们看到一个依赖关系通过构造函数被注入。注入是由一个类型提示接口和实际的具体类抽象出来的。这使得我们的代码松散耦合。DIP可以在任何时候使用,一个类需要调用另一个类的方法,或者我们应该说是向它发送消息。
49 |
50 |
--------------------------------------------------------------------------------
/mo-kuai-san/symfony-gai-shu/README.md:
--------------------------------------------------------------------------------
1 | # Symfony 概述
2 |
3 | 像Symfony这样的全栈框架通过提供从用户界面到数据存储的所有必要组件,帮助简化了构建模块化应用的过程。这使得随着应用的发展,可以快速循环地交付各个零碎的应用。稍后我们将通过将我们的应用程序分割成若干个小的模块,或者Symfony术语中的捆绑包来体验这一点。
4 |
5 | 接下来,我们将安装Symfony,创建一个空白项目,并开始研究构建模块化应用所必需的单个框架功能:
6 |
7 | * 控制器
8 | * 路由
9 | * 模板
10 | * 表单
11 | * bundle 系统
12 | * 数据库和 Doctrine
13 | * 测试
14 | * 验证
15 |
16 | ## 安装Symphony
17 |
18 | 安装Symfony是非常简单的。我们可以使用以下命令在Linux或Mac OS X上安装Symfony:
19 |
20 | ```bash
21 | sudo curl -LsS https://symfony.com/installer -o /usr/local/bin/symfony
22 | sudo chmod a+x /usr/local/bin/symfony
23 | ```
24 |
25 | 我们可以使用以下命令在Windows上安装Symfony:
26 |
27 | ```text
28 | c:\> php -r "file_put_contents('symfony', file_get_contents('https://symfony.com/installer'));"
29 | ```
30 |
31 | 一旦命令被执行,我们可以简单地将新创建的`symfony`文件移动到我们的项目目录下,并进一步以`symfony`的形式执行,或者在Windows中以`php symfony`的形式执行。
32 |
33 | 这样就会产生如下所示的输出:
34 |
35 | 
36 |
37 | 前面的响应表明我们已经成功地设置了Symfony,现在可以开始创建新项目了。
38 |
39 |
--------------------------------------------------------------------------------
/mo-kuai-san/symfony-gai-shu/bundle-xi-tong.md:
--------------------------------------------------------------------------------
1 | # bundle 系统
2 |
3 | 大多数流行的框架和平台都支持某种形式的模块、插件、扩展或 bundles。在大多数时候,两者的区别其实只是在命名上,而可扩展性和模块化的概念是一样的。在 Symfony 中,这些模块化模块被称为 bundles。
4 |
5 | bundles 是 Symfony 中的一等公民,因为它们支持其他组件的所有操作。Symfony 中的所有东西都是一个bundle,甚至是核心框架。bundles 使我们能够构建模块化的应用程序,而一个特定功能的全部代码都包含在一个目录中。
6 |
7 | 一个bundle 将所有的PHP文件,模板,样式表,JavaScript文件,测试和其他任何东西都放在一个根目录中。
8 |
9 | 当我们第一次设置测试应用程序时,它为我们创建了一个`AppBundle`,在`src`目录下。随着我们推进自动生成的CRUD,我们看到我们的 bundle 得到了各种各样的目录和文件。
10 |
11 | 要想让一个 bundle 被 Symfony 注意到,需要将它添加到`app/AppKernel.php`文件中,使用`registerBundles`方法,如图所示:
12 |
13 | ```php
14 | public function registerBundles()
15 | {
16 | $bundles = [
17 | new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
18 | new Symfony\Bundle\SecurityBundle\SecurityBundle(),
19 | new Symfony\Bundle\TwigBundle\TwigBundle(),
20 | new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
21 | new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
22 | //…
23 | new AppBundle\AppBundle(),
24 | ];
25 |
26 | //…
27 |
28 | return $bundles;
29 | }
30 | ```
31 |
32 | 创建一个新的 bundle 就像创建一个PHP文件一样简单。让我们继续创建一个`src/TestBundle/TestBundle.php`文件,内容如下:
33 |
34 | ```php
35 | namespace TestBundle;
36 |
37 | use Symfony\Component\HttpKernel\Bundle\Bundle;
38 |
39 | class TestBundle extends Bundle
40 | {
41 | …
42 | }
43 | ```
44 |
45 | 一旦文件到位,我们需要做的就是通过`app/AppKernel.php`文件的`registerBundles`方法进行注册,如图所示:
46 |
47 | ```php
48 | class AppKernel extends Kernel {
49 | //…
50 | public function registerBundles() {
51 | $bundles = [
52 | // …
53 | new TestBundle\TestBundle(),
54 | // …
55 | ];
56 | return $bundles;
57 | }
58 | //…
59 | }
60 | ```
61 |
62 | 创建一个 bundle 的更简单的方法是运行一个控制台命令,如下所示:
63 |
64 | ```bash
65 | php bin/console generate:bundle --namespace=Foggyline/TestBundle
66 | ```
67 |
68 | 这将会触发一系列关于 bundle 的问题,最终导致 bundle 的创建,看起来像下面的截图:
69 |
70 | 
71 |
72 | 一旦完成这个过程,就会创建一个包含多个目录和文件的新 bundle,如下图所示:
73 |
74 | 
75 |
76 | Bundle 生成器很友好地创建了控制器、依赖注入扩展、路由、准备服务配置、模板,甚至测试。由于我们选择共享我们的 bundle,Symfony 选择了 XML 作为默认的配置格式。依赖扩展简单来说就是我们可以通过使用 `foggyline_test`作为 Symfony 主 `config.yml`的根元素来访问我们的 bundle 配置。实际的`foggyline_test`元素是在`DependencyInjection/Configuration.php`文件中定义的。
77 |
78 |
--------------------------------------------------------------------------------
/mo-kuai-san/symfony-gai-shu/ce-shi.md:
--------------------------------------------------------------------------------
1 | # 测试
2 |
3 | 如今,测试已经成为每个现代 web 应用程序不可或缺的一部分。通常测试这个词意味着单元测试和功能测试。单元测试是关于测试我们的 PHP 类。每个 PHP 类都被认为是一个单元,因此称为单元测试。另一方面,功能测试测试我们应用程序的各个层次,通常集中于测试整个功能,比如登录或注册过程。
4 |
5 | PHP 生态系统有一个很棒的单元测试框架,叫做 PHPUnit,可以在 [https://PHPUnit.de](https://PHPUnit.de) 下载。它使我们能够编写基本的单元测试,也能够编写功能类型测试。Symfony 最棒的地方在于它内置了对 PHPUnit 的支持。
6 |
7 | 在我们开始运行 Symfony 的测试之前,我们需要确保我们已经安装了 PHPUnit,并且可以作为控制台命令使用。当执行时,`PHPUnit.xml` 或 `PHPUnit.xml.dist` 会自动尝试从当前工作目录中的 `PHPUnit.xml` 或 `PHPUnit.xml.dist` 获取和读取测试配置。默认情况下,Symfony 在其根文件夹中附带一个 `phpunit.xml.dist` 文件,因此 phpunit 命令可以选择其测试配置。
8 |
9 | 下面是默认 `phpunit.xml.dist` 文件的部分示例:
10 |
11 | ```markup
12 |
🙈 | 28 |🙉 | 29 |🙊 | 30 |
40 | | 41 | | 42 | |
🙈 | 78 |🙉 | 79 |🙊 | 80 |
57 | 67 |68 | 69 | 70 | ``` 71 | 72 | 下面是浏览器的输出。 73 | 74 |  75 | 76 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-er-zhang-shi-yong-php-7-gao-xing-neng-te-xing.md: -------------------------------------------------------------------------------- 1 | # 第二章: 使用 PHP 7 高性能特性 2 | 3 | 在这一章中,我们将讨论和理解 PHP 5和 PHP 7之间的语法差异,特别是以下几点: 4 | 5 | * 了解抽象语法树 6 | * 了解解析的差异 7 | * 了解 `foreach()` 处理方式的差异 8 | * 使用PHP 7增强功能来提高性能 9 | * 遍历海量文件 10 | * 将电子表格上传到数据库 11 | * 递归目录迭代器 12 | 13 | ## 引言 14 | 15 | 在本章中,我们将直接进入PHP 7,介绍利用新的高性能特性的示例。 但是,首先,我们将提供一系列较小的示例,这些示例用来说明PHP 7在处理参数解析,语法,`foreach()` 循环和其他增强功能方面的差异。 在深入本章之前,让我们讨论PHP 5和PHP 7之间的一些基本区别。 16 | 17 | PHP 7引入了一个称为**抽象语法树**\(**AST**\)的新层,该层有效地将解析过程与伪编译过程解耦。 尽管新层对性能几乎没有影响,但是却为语言提供了新的语法统一性,这在以前是不可能的。 18 | 19 | AST 的另一个好处是取消引用的过程。 简单地说,取消引用是指能够立即从对象获取属性或运行对象的方法,立即访问数组元素并立即执行回调的能力。 在PHP 5中,这种支持是不一致和不完整的。 例如,要执行回调,通常首先需要将回调或匿名函数分配给变量,然后再执行它。 在PHP 7中,您可以立即执行它。 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-er-zhang-shi-yong-php-7-gao-xing-neng-te-xing/README.md: -------------------------------------------------------------------------------- 1 | # 第二章、使用 PHP 7 高性能特性 2 | 3 | 在这一章中,我们将讨论和理解 PHP 5和 PHP 7之间的语法差异,特别是以下几点: 4 | 5 | * 了解抽象语法树 6 | * 理解句法分析中的差异 7 | * 理解 `foreach()` 处理方式的差异 8 | * 使用 PHP 7 增强功能来提高性能 9 | * 遍历海量文件 10 | * 将电子表格上传到数据库 11 | * 递归目录迭代器 12 | 13 | ## 引言 14 | 15 | 在本章中,我们将直接进入PHP 7,介绍利用新的高性能特性的示例。 但是,首先,我们将提供一系列较小的示例,这些示例用来说明PHP 7在处理参数解析,语法,`foreach()` 循环和其他增强功能方面的差异。 在深入本章之前,让我们讨论PHP 5和PHP 7之间的一些基本区别。 16 | 17 | PHP 7引入了一个称为**抽象语法树**\(**AST**\)的新层,该层有效地将解析过程与伪编译过程解耦。 尽管新层对性能几乎没有影响,但是却为语言提供了新的语法统一性,这在以前是不可能的。 18 | 19 | AST 的另一个好处是取消引用的过程。 简单地说,取消引用是指能够立即从对象获取属性或运行对象的方法,立即访问数组元素并立即执行回调的能力。 在PHP 5中,这种支持是不一致和不完整的。 例如,要执行回调,通常首先需要将回调或匿名函数分配给变量,然后再执行它。 在PHP 7中,您可以立即执行它。 20 | 21 | 22 | 23 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-er-zhang-shi-yong-php-7-gao-xing-neng-te-xing/bian-li-hai-liang-wen-jian.md: -------------------------------------------------------------------------------- 1 | # 遍历海量文件 2 | 3 | 像 `file_get_contents()` 和 `file()` 这样的函数使用起来非常方便快捷,但是由于内存的限制,当处理大量的文件时,它们很快就会产生问题。`php.ini` 内存限制的默认设置是128兆字节。因此,任何大于这个值的文件都不会被加载。 4 | 5 | 在解析海量文件时,另一个需要考虑的问题是函数或类方法产出的速度有多快? 例如,在生成用户输出时,尽管乍一看似乎可以将输出累加到数组中。 然后,您将立即输出所有内容以提高效率。 不幸的是,这可能会对用户体验产生不利影响。 创建一个**生成器**,并使用 `yield` 关键字产生即时结果可能会更好。 6 | 7 | ## 如何做... 8 | 9 | 如前文所述, `file*` 函数(即 `file_get_contents()` ),不适合大文件。原因很简单,这些函数,在某一点上,文件的全部内容都会写入到内存中。因此,本示例的重点是 `f*` 函数(即 `fopen()` )。 10 | 11 | 然而,稍有变化的是,我们将不直接使用 `f*` 函数,而是使用**SPL**(**标准PHP库**)中包含的 `SplFileObject` 类。 12 | 13 | 1.首先,我们定义一个 `Application\Iterator\LargeFile` 类,并赋予相应的属性和常量: 14 | 15 | ```php 16 | namespace Application\Iterator; 17 | 18 | use Exception; 19 | use InvalidArgumentException; 20 | use SplFileObject; 21 | use NoRewindIterator; 22 | 23 | class LargeFile 24 | { 25 | const ERROR_UNABLE = 'ERROR: Unable to open file'; 26 | const ERROR_TYPE = 'ERROR: Type must be "ByLength", "ByLine" or "Csv"'; 27 | protected $file; 28 | protected $allowedTypes = ['ByLine', 'ByLength', 'Csv']; 29 | ``` 30 | 31 | 2.然后我们定义了一个 `__construct()` 方法,它接受一个文件名作为参数,并用一个 `SplFileObject` 实例填充 `$file` 属性。如果文件不存在,这也是一个抛出异常的好地方: 32 | 33 | ```php 34 | public function __construct($filename, $mode = 'r') 35 | { 36 | if (!file_exists($filename)) { 37 | $message = __METHOD__ . ' : ' . self::ERROR_UNABLE . PHP_EOL; 38 | $message .= strip_tags($filename) . PHP_EOL; 39 | throw new Exception($message); 40 | } 41 | $this->file = new SplFileObject($filename, $mode); 42 | } 43 | ``` 44 | 45 | 3.接下来我们定义一个 `fileIteratorByLine()` 方法,该方法使用 `fgets()` 一次读取文件的一行。另创建一个 `fileIteratorByLength()` 方法,它可以做同样的事情,但使用 `fread()` 来代替。使用 `fgets()` 的方法适用于包含换行的文本文件。如果解析一个大的二进制文件,可以使用另一个方法: 46 | 47 | ```php 48 | protected function fileIteratorByLine() 49 | { 50 | $count = 0; 51 | while (!$this->file->eof()) { 52 | yield $this->file->fgets(); 53 | $count++; 54 | } 55 | return $count; 56 | } 57 | 58 | protected function fileIteratorByLength($numBytes = 1024) 59 | { 60 | $count = 0; 61 | while (!$this->file->eof()) { 62 | yield $this->file->fread($numBytes); 63 | $count++; 64 | } 65 | return $count; 66 | } 67 | ``` 68 | 69 | 4.最后,我们定义一个 `getIterator()` 方法,返回一个 `NoRewindIterator()` 实例。这个方法接受 `ByLine` 或 `ByLength` 作为参数,它们指的是上一步定义的两个方法。在调用 `ByLength` 的情况下,这个方法还需要接受 `$numBytes`。我们需要 `NoRewindIterator()` 实例的原因是,在这个例子中,我们只从一个方向读取文件: 70 | 71 | ```php 72 | public function getIterator($type = 'ByLine', $numBytes = NULL) 73 | { 74 | if(!in_array($type, $this->allowedTypes)) { 75 | $message = __METHOD__ . ' : ' . self::ERROR_TYPE . PHP_EOL; 76 | throw new InvalidArgumentException($message); 77 | } 78 | $iterator = 'fileIterator' . $type; 79 | return new NoRewindIterator($this->$iterator($numBytes)); 80 | } 81 | ``` 82 | 83 | ## 如何运行... 84 | 85 | 首先,我们利用第一章《建立基础》中定义的自动加载类,在调用程序中获取 `Application\Iterator\LargeFile` 的实例, `chap_02_iterating_through_a_massive_file.php` : 86 | 87 | ```php 88 | define('MASSIVE_FILE', '/../data/files/war_and_peace.txt'); 89 | require __DIR__ . '/../Application/Autoload/Loader.php'; 90 | Application\Autoload\Loader::init(__DIR__ . '/..'); 91 | ``` 92 | 93 | 接下来,在 `try {...} catch () {...}` 块里面,我们得到一个 `ByLine` 迭代器的实例: 94 | 95 | ```php 96 | try { 97 | $largeFile = new Application\Iterator\LargeFile(__DIR__ . MASSIVE_FILE); 98 | $iterator = $largeFile->getIterator('ByLine'); 99 | ``` 100 | 101 | 然后,我们提供一个有用的示例,在这种情况下,定义每行平均单词数: 102 | 103 | ```php 104 | $words = 0; 105 | foreach ($iterator as $line) { 106 | echo $line; 107 | $words += str_word_count($line); 108 | } 109 | echo str_repeat('-', 52) . PHP_EOL; 110 | printf("%-40s : %8d\n", 'Total Words', $words); 111 | printf("%-40s : %8d\n", 'Average Words Per Line', 112 | ($words / $iterator->getReturn())); 113 | echo str_repeat('-', 52) . PHP_EOL; 114 | ``` 115 | 116 | 然后,我们结束catch块: 117 | 118 | ```php 119 | } catch (Throwable $e) { 120 | echo $e->getMessage(); 121 | } 122 | ``` 123 | 124 | 预期的输出(太大了,这里就不显示了!)在本示例中我们采用了古腾堡版的《战争与和平》其中有566,095个字。另外,我们发现每行的平均字数是8个。 125 | 126 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-er-zhang-shi-yong-php-7-gao-xing-neng-te-xing/jiang-dian-zi-biao-ge-shang-chuan-dao-shu-ju-ku.md: -------------------------------------------------------------------------------- 1 | # 将电子表格上传到数据库 2 | 3 | 尽管 PHP 没有任何直接读取特定电子表格格式的能力(如 XLSX、ODS 等),但它有读取(CSV 逗号分隔值)文件的能力,因此,为了处理客户的电子表格,需要要求他们提供 CSV 格式的文件,或者需要自己进行转换。 4 | 5 | ## 准备... 6 | 7 | 当要把电子表格(即CSV文件)上传到数据库中时,有三个主要的考虑因素: 8 | 9 | * 迭代一个(潜在的)庞大的文件 10 | * 将每个电子表格的行提取到一个PHP数组中 11 | * 在数据库中插入PHP数组 12 | 13 | 大规模的文件迭代使用前面的示例来处理,我们使用 `fgetcsv()` 函数将CSV行转换为PHP数组。最后,我们使用\(**PDO PHP Data Objects**\)类建立数据库连接并进行插入。 14 | 15 | ## 如何做... 16 | 17 | 1.首先,我们定义一个 `Application\Database\Connection` 类,该类根据提供给构造函数的一组参数创建一个 PDO 实例。 18 | 19 | ```php 20 | pdo = new PDO($dsn, 42 | $config['user'], 43 | $config['password'], 44 | [PDO::ATTR_ERRMODE => $config['errmode']]); 45 | } catch (PDOException $e) { 46 | error_log($e->getMessage()); 47 | } 48 | } 49 | 50 | } 51 | ``` 52 | 53 | 2.然后,我们加入一个 `Application\Iterator\LargeFile` 的实例。我们在这个类中添加了一个新的方法,这个方法被设计用来迭代 CSV 文件: 54 | 55 | ```php 56 | protected function fileIteratorCsv() 57 | { 58 | $count = 0; 59 | while (!$this->file->eof()) { 60 | yield $this->file->fgetcsv(); 61 | $count++; 62 | } 63 | return $count; 64 | } 65 | ``` 66 | 67 | 3.我们还需要将 Csv 添加到允许的迭代器方法列表中: 68 | 69 | ```php 70 | const ERROR_UNABLE = 'ERROR: Unable to open file'; 71 | const ERROR_TYPE = 'ERROR: Type must be "ByLength", "ByLine" or "Csv"'; 72 | 73 | protected $file; 74 | protected $allowedTypes = ['ByLine', 'ByLength', 'Csv']; 75 | ``` 76 | 77 | ## 如何运行... 78 | 79 | 首先我们定义一个配置文件, `/path/to/source/config/db.config.php` ,其中包含数据库连接参数: 80 | 81 | ```php 82 | 'mysql', 85 | 'host' => 'localhost', 86 | 'dbname' => 'php7cookbook', 87 | 'user' => 'cook', 88 | 'password' => 'book', 89 | 'errmode' => PDO::ERRMODE_EXCEPTION, 90 | ]; 91 | ``` 92 | 93 | 接下来,我们利用第一章 《建立基础》 中定义的自动加载类,获得 `Application\Database\DatabaseConnection` 和 `Application\Iterator\LargeFile` 的实例,定义一个调用程序,`chap_02_uploading_csv_to_database.php` 。 94 | 95 | ```php 96 | define('DB_CONFIG_FILE', '/../data/config/db.config.php'); 97 | define('CSV_FILE', '/../data/files/prospects.csv'); 98 | require __DIR__ . '/../../Application/Autoload/Loader.php'; 99 | Application\Autoload\Loader::init(__DIR__ . '/..'); 100 | ``` 101 | 102 | 之后,我们设置了一个 `try {...} catch () {...}` 块,它可以捕获 `Throwable` 。这样我们就可以同时捕获异常和错误: 103 | 104 | ```php 105 | try { 106 | // ... 107 | } catch (Throwable $e) { 108 | echo $e->getMessage(); 109 | } 110 | ``` 111 | 112 | 在 `try {...} catch () {...}` 块里面,我们得到一个连接和大文件迭代器类的实例: 113 | 114 | ```php 115 | $connection = new Application\Database\Connection( 116 | include __DIR__ . DB_CONFIG_FILE); 117 | $iterator = (new Application\Iterator\LargeFile(__DIR__ . CSV_FILE)) 118 | ->getIterator('Csv'); 119 | ``` 120 | 121 | 然后我们利用PDO的 prepare/execute 功能。准备语句 SQL 中的 `?` 表示参数标记,参数在SQL执行时会被替换: 122 | 123 | ```php 124 | $sql = 'INSERT INTO `prospects` ' 125 | . '(`id`,`first_name`,`last_name`,`address`,`city`,`state_province`,' 126 | . '`postal_code`,`phone`,`country`,`email`,`status`,`budget`,`last_updated`) ' 127 | . ' VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)'; 128 | $statement = $connection->pdo->prepare($sql); 129 | ``` 130 | 131 | 然后我们使用 `foreach()` 来循环执行文件迭代器。每一条 `yield` 语句都会产生一个代表数据库中一行值的数组。然后,我们可以使用这些值与 `PDOStatement::execute()` 来执行准备好的语句,将该行的值插入到数据库中。 132 | 133 | ```php 134 | foreach ($iterator as $row) { 135 | echo implode(',', $row) . PHP_EOL; 136 | $statement->execute($row); 137 | } 138 | ``` 139 | 140 | 然后可以检查数据库,以验证数据是否已成功插入。 141 | 142 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-er-zhang-shi-yong-php-7-gao-xing-neng-te-xing/li-jie-ju-fa-fen-xi-zhong-de-cha-yi.md: -------------------------------------------------------------------------------- 1 | # 理解句法分析中的差异 2 | 3 | 在 PHP 5中,赋值操作右侧的表达式是从右向左解析的。在 PHP 7中,解析始终是从左到右的。 4 | 5 | ## 如何做... 6 | 7 | 1.变量-变量是间接引用值的一种方式。 在下面的示例中,第一个 `$$foo` 被解释为 `${$bar}` 。 因此,最终的返回值是 `$bar` 的值,而不是 `$foo` 的直接值(可能是 `bar`): 8 | 9 | ```php 10 | $foo = 'bar'; 11 | $bar = 'baz'; 12 | echo $$foo; // 返回 'baz'; 13 | ``` 14 | 15 | 2.在下一个示例中,我们有一个变量-变量 `$$foo` ,该变量引用带有 `bar`键和 `baz` 子键的多维数组: 16 | 17 | ```php 18 | $foo = 'bar'; 19 | $bar = ['bar' => ['baz' => 'bat']]; 20 | // 返回 'bat' 21 | echo $$foo['bar']['baz']; 22 | ``` 23 | 24 | 3.在PHP 5中,解析是从右到左进行的,这意味着PHP引擎将寻找带有 `bar` 键和 `baz` 子键的 `$foo` 数组。 然后将解释该元素的返回值以获得最终值 `${$foo['bar']['baz']}`。 25 | 26 | 4.但是,在PHP 7中,解析始终是从左到右,这意味着 `$foo` 首先被解释 `($$foo)['bar']['baz']` 。 27 | 28 | 5.在下一个示例中,您可以看到与PHP 7相比,PHP 5中对 `$foo->$bar['bada']` 的解释完全不同。在下面的示例中,PHP 5将首先解释 `$bar['bada']` ,并针对 `$foo` 对象实例引用此返回值。 另一方面,在PHP 7中,解析始终是从左到右,这意味着 `$foo->$bar` 首先被解释,并且期望包含 `bada` 元素的数组。 您还将注意到,该示例使用了PHP 7匿名类功能: 29 | 30 | ```php 31 | // PHP 5: $foo->{$bar['bada']} 32 | // PHP 7: ($foo->$bar)['bada'] 33 | $bar = 'baz'; 34 | // $foo = new class 35 | { 36 | public $baz = ['bada' => 'boom']; 37 | }; 38 | // returns 'boom' 39 | echo $foo->$bar['bada']; 40 | ``` 41 | 42 | 6.最后一个示例与上面的示例相同,不同之处在于返回值是个回调,然后立即执行: 43 | 44 | ```php 45 | // PHP 5: $foo->{$bar['bada']}() 46 | // PHP 7: ($foo->$bar)['bada']() 47 | $bar = 'baz'; 48 | // 注意: 这个例子使用了新的 PHP 7匿名类特性 49 | $foo = new class 50 | { 51 | public function __construct() 52 | { 53 | $this->baz = ['bada' => function () { return 'boom'; }]; 54 | } 55 | }; 56 | // 返回 'boom' 57 | echo $foo->$bar['bada'](); 58 | ``` 59 | 60 | ## 如何运行... 61 | 62 | 将1和2中所示的代码示例放在一个单独的PHP文件中,您可以命名为 `chap_02_understanding_diffs_in_parsing.php` 。 首先使用PHP 5执行该脚本,您将注意到一系列错误,如下所示: 63 | 64 |  65 | 66 | 错误的原因是PHP 5解析不一致,并且就请求的变量-变量的状态得出了错误的结论(如前所述)。 现在,您可以继续添加其余示例,如步骤5和6所示。如果您随后在PHP 7中运行此脚本,则将显示所描述的结果,如下所示: 67 | 68 |  69 | 70 | ## 参考 71 | 72 | 有关解析的更多信息,请参考 RFC,它提供了统一变量语法,并且可以在 [https://wiki.php.net/RFC/uniform\_variable\_syntax](https://wiki.php.net/RFC/uniform_variable_syntax) 查看。 73 | 74 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-er-zhang-shi-yong-php-7-gao-xing-neng-te-xing/shi-yong-php-7-zeng-qiang-gong-neng-ti-gao-xing-neng.md: -------------------------------------------------------------------------------- 1 | # 使用 PHP 7 增强功能提高性能 2 | 3 | 一个趋势是,开发者开始使用匿名函数。当处理匿名函数时,一个典型的问题是,如何将它们写成任何对象都可以绑定到 `$this` 的形式,并且函数仍然可以工作。在 PHP 5 代码中使用的方法是使用 `bindTo()` 。在 PHP 7 中,增加了一个新的方法 `call()` ,它提供了类似的功能,但性能有很大的提升。 4 | 5 | ## 如何做... 6 | 7 | 为了利用 `call()` ,在一个冗长的循环中执行一个匿名函数。在这个例子中,我们将演示一个匿名函数,它可以扫描一个日志文件,根据出现的频率识别 IP 地址: 8 | 9 | 1.首先,我们定义一个 `Application\Web\Access` 类。 在构造函数中,我们接受文件名作为参数。日志文件通过 `SplFileObject` 打开,并分配给 `$this->log` : 10 | 11 | ```php 12 | Namespace Application\Web; 13 | 14 | use Exception; 15 | use SplFileObject; 16 | class Access 17 | { 18 | const ERROR_UNABLE = 'ERROR: unable to open file'; 19 | protected $log; 20 | public $frequency = array(); 21 | public function __construct($filename) 22 | { 23 | if (!file_exists($filename)) { 24 | $message = __METHOD__ . ' : ' . self::ERROR_UNABLE . PHP_EOL; 25 | $message .= strip_tags($filename) . PHP_EOL; 26 | throw new Exception($message); 27 | } 28 | $this->log = new SplFileObject($filename, 'r'); 29 | } 30 | ``` 31 | 32 | 2.接下来,我们定义一个生成器,逐行遍历文件: 33 | 34 | ```php 35 | public function fileIteratorByLine() 36 | { 37 | $count = 0; 38 | while (!$this->log->eof()) { 39 | yield $this->log->fgets(); 40 | $count++; 41 | } 42 | return $count; 43 | } 44 | ``` 45 | 46 | 3. 最后,我们定义了一个寻找并提取一个IP地址作为子匹配的方法: 47 | 48 | ```php 49 | public function getIp($line) 50 | { 51 | preg_match('/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/', $line, $match); 52 | return $match[1] ?? ''; 53 | } 54 | } 55 | ``` 56 | 57 | ## 如何运行... 58 | 59 | 首先,我们定义一个调用程序 `chap_02_performance_using_php7_enchancement_call.php` ,该程序利用第一章《建立基础》中定义的自动加载类来获取 `Application\Web\Access` 的实例: 60 | 61 | ```php 62 | define('LOG_FILES', '/var/log/apache2/*access*.log'); 63 | require __DIR__ . '/../Application/Autoload/Loader.php'; 64 | Application\Autoload\Loader::init(__DIR__ . '/..'); 65 | ``` 66 | 67 | 接下来我们定义匿名函数,处理日志文件中的一行。如果检测到一个IP地址,它就会成为 `$frequency` 数组中的一个键,并且这个键的当前值会递增: 68 | 69 | ```php 70 | // 定义方法 71 | $freq = function ($line) { 72 | $ip = $this->getIp($line); 73 | if ($ip) { 74 | echo '.'; 75 | $this->frequency[$ip] = 76 | (isset($this->frequency[$ip])) ? $this->frequency[$ip] + 1 : 1; 77 | } 78 | }; 79 | ``` 80 | 81 | 然后,我们在每个找到的日志文件中循环迭代行,处理IP地址: 82 | 83 | ```php 84 | foreach (glob(LOG_FILES) as $filename) { 85 | echo PHP_EOL . $filename . PHP_EOL; 86 | // 存取类 87 | $access = new Application\Web\Access($filename); 88 | foreach ($access->fileIteratorByLine() as $line) { 89 | $freq->call($access, $line); 90 | } 91 | } 92 | ``` 93 | 94 | > **小贴士** 95 | > 96 | > 实际上在 PHP 5 中也可以做同样的事情,但是需要两行代码。 97 | > 98 | > ```php 99 | > $func = $freq->bindTo($access); 100 | > $func($line); 101 | > ``` 102 | > 103 | > 性能比在 PHP 7 中使用 `call()` 慢20%到50%。 104 | 105 | 最后,我们对数组进行反向排序,但保留键。然后通过简单的 `foreach()` 循环输出: 106 | 107 | ```php 108 | arsort($access->frequency); 109 | foreach ($access->frequency as $key => $value) { 110 | printf('%16s : %6d' . PHP_EOL, $key, $value); 111 | } 112 | ``` 113 | 114 | 他的输出会根据你处理的 `access.log` 而有所不同。下面是一个例子: 115 | 116 |  117 | 118 | ## 更多... 119 | 120 | 许多 PHP 7 的性能改进与新特性和功能无关。相反,它们采取的是内部改进的形式,在开始运行程序之前是看不见的。以下是属于这一类的改进的简短列表: 121 | 122 | | 功能 | 更多信息 | 注释 | 123 | | :--- | :--- | :--- | 124 | | 快速参数解析 | [https://wiki.php.net/rfc/fast\_zpp](https://wiki.php.net/rfc/fast_zpp) | 在 PHP 5 中,每次调用函数时都要对提供给函数的参数进行解析。参数以字符串的形式传入,并以类似于 `scanf()` 函数的方式进行解析。在 PHP 7 中,这个过程得到了优化,变得更加高效,从而使性能得到了显著的提高。这种改进很难衡量,但似乎在6%左右。 | 125 | | PHP NG | [https://wiki.php.net/rfc/phpng](https://wiki.php.net/rfc/phpng) | PHP NG(下一代)计划代表了PHP语言的大部分重写。它保留了现有的功能,但包含了所有可以想象到的节省时间和提高效率的措施。数据结构被压缩,内存被更有效地使用。仅仅是一个影响数组处理的变化,就使性能得到了显著的提高,同时大大减少了内存的使用。 | 126 | | 删除无效的扩展 | [https://wiki.php.net/rfc/removal\_of\_dead\_sapis\_and\_exts](https://wiki.php.net/rfc/removal_of_dead_sapis_and_exts) | 大约有二十多个扩展属于这些类别中的一种:废弃的、不再维护的、未维护的依赖关系、或未移植到 PHP 7。经过核心开发人员的投票,决定删除 2/3 或 "短名单 "上的扩展。这样做的结果是减少了开销,加快了PHP语言未来的整体开发速度。 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-jiu-zhang-kai-fa-zhong-jian-jian.md: -------------------------------------------------------------------------------- 1 | # 第九章、开发中间件 2 | 3 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-jiu-zhang-kai-fa-zhong-jian-jian/README.md: -------------------------------------------------------------------------------- 1 | # 第九章、开发中间件 2 | 3 | 在本章中,我们将涉及以下主题。 4 | 5 | * 使用中间件进行认证 6 | * 使用中间件实现访问控制 7 | * 使用高速缓存提高性能 8 | * 实施路由选择 9 | * 进行框架间的系统调用 10 | * 使用中间件来跨语言 11 | 12 | ## 前言 13 | 14 | 正如IT行业经常发生的那样,术语被发明出来,然后被使用和滥用。中间件这个词也不例外。可以说,这个术语的第一次使用是在2000年由互联网工程任务组(IETF)提出的。最初,这个术语适用于任何在传输层(即TCP/IP)和应用层之间操作的软件。最近,特别是随着PHP标准建议7(PSR-7)的接受,中间件,特别是PHP世界中的中间件,已经被应用于Web客户-服务器环境。 15 | 16 | {% hint style="info" %} 17 | 本节中的事例将使用附录《定义PSR-7类》中定义的具体类。 18 | {% endhint %} 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-liu-zhang-jian-li-ke-kuo-zhan-de-wang-zhan.md: -------------------------------------------------------------------------------- 1 | # 第六章、建立可扩展的网站 2 | 3 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-liu-zhang-jian-li-ke-kuo-zhan-de-wang-zhan/README.md: -------------------------------------------------------------------------------- 1 | # 第六章、建立可扩展的网站 2 | 3 | 在这一章中,我们将讨论以下主题: 4 | 5 | * 创建通用表单元素生成器 6 | * 创建一个HTML单选元素生成器 7 | * 创建一个HTML选择元素生成器 8 | * 实现表单工厂 9 | * 链式 $\_POST 过滤器 10 | * 链式 $\_POST 验证器 11 | * 将验证绑定到表单 12 | 13 | ## 引言 14 | 15 | 在本章中,我们将向您展示如何构建生成HTML表单元素的类。通用元素生成器可以用于文本、文本区域、密码和类似的HTML输入类型。之后,我们将展示允许你用一个值数组预先配置元素的变体。表单工厂的示例将把所有这些生成器整合在一起,让您使用一个配置数组来渲染整个表单。最后,我们介绍允许过滤和验证输入的 `$_POST` 数据的示例。 16 | 17 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-qi-zhang-fang-wen-web-fu-wu.md: -------------------------------------------------------------------------------- 1 | # 第七章、访问Web服务 2 | 3 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-qi-zhang-fang-wen-web-fu-wu/README.md: -------------------------------------------------------------------------------- 1 | # 第七章、访问Web服务 2 | 3 | 在本章中,我们将介绍以下主题: 4 | 5 | * 在PHP和XML之间转换 6 | * 创建一个简单的REST客户端 7 | * 创建一个简单的REST服务器 8 | * 创建一个简单的SOAP客户端 9 | * 创建一个简单的SOAP服务器 10 | 11 | ## 引言 12 | 13 | 对外部网络服务进行后台查询正在成为任何PHP网络实践中越来越多的一部分。能够提供适当的、及时的、丰富的数据意味着为你的客户和你开发的网站带来更多的业务。我们首先介绍几个在可扩展标记语言(XML)和本地 PHP 之间进行数据转换的事例。接下来,我们将向您展示如何实现一个简单的代表状态传输(REST)客户端和服务器。之后,我们将注意力转向SOAP客户端和服务器。 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-qi-zhang-fang-wen-web-fu-wu/chuang-jian-yi-ge-jian-dan-de-soap-ke-hu-duan.md: -------------------------------------------------------------------------------- 1 | # 创建一个简单的SOAP客户端 2 | 3 | 与实现REST客户端或服务器的过程相比,使用SOAP是非常容易的,因为有一个PHP SOAP扩展提供了这两种功能。 4 | 5 | {% hint style="info" %} 6 | 一个经常被问到的问题是 "SOAP和REST之间有什么区别?" SOAP内部使用XML作为其数据格式。SOAP使用HTTP,但只用于传输,除此之外对其他HTTP方法无法进行识别。REST直接操作HTTP,可以使用任何数据格式,但首选JSON。另一个关键的区别是,SOAP可以与WSDL一起操作,这使得服务自我描述,从而更加公开。因此,SOAP服务通常由国家卫生组织等公共机构提供。 7 | {% endhint %} 8 | 9 | ## 如何做... 10 | 11 | 在这个例子中,我们将对美国国家气象服务提供的现有SOAP服务进行SOAP请求。 12 | 13 | 1.首先要考虑的是识别WSDL文档。WSDL是描述服务的XML文档。 14 | 15 | ```php 16 | $wsdl = 'http://graphical.weather.gov/xml/SOAP_server/' 17 | . 'ndfdXMLserver.php?wsdl'; 18 | ``` 19 | 20 | 2.接下来,我们使用 WSDL 创建一个 soap 客户端实例。 21 | 22 | ```php 23 | $soap = new SoapClient($wsdl, array('trace' => TRUE)); 24 | ``` 25 | 26 | 3.然后,我们可以自由地初始化一些变量,以应对天气预报的请求。 27 | 28 | ```php 29 | $units = 'm'; 30 | $params = ''; 31 | $numDays = 7; 32 | $weather = ''; 33 | $format = '24 hourly'; 34 | $startTime = new DateTime(); 35 | ``` 36 | 37 | 4. 然后,我们可以发出`LatLonListCityNames()`SOAP请求,在WSDL中被标识为一个操作,以获取服务支持的城市列表。该请求以 XML 格式返回,建议创建一个 `SimpleXLMElement` 实例。 38 | 39 | ```php 40 | $xml = new SimpleXMLElement($soap->LatLonListCityNames(1)); 41 | ``` 42 | 43 | 5. 不幸的是,城市列表和它们对应的经纬度是在单独的XML节点中。因此,我们使用`array_combine()`PHP函数来创建一个关联数组,其中经纬度是键,城市名称是值。然后我们可以使用这个数组来呈现一个HTML `SELECT`下拉列表,使用`asort()`来对列表进行字母排序。 44 | 45 | ```php 46 | $cityNames = explode('|', $xml->cityNameList); 47 | $latLonCity = explode(' ', $xml->latLonList); 48 | $cityLatLon = array_combine($latLonCity, $cityNames); 49 | asort($cityLatLon); 50 | ``` 51 | 52 | 6. 然后,我们可以从网络请求中获得城市数据,如下所示。 53 | 54 | ```php 55 | $currentLatLon = (isset($_GET['city'])) ? strip_tags(urldecode($_GET['city'])) : ''; 56 | ``` 57 | 58 | 7.我们希望进行的 SOAP 调用是 `NDFDgenByDay()`。我们可以通过检查 WSDL 来确定提供给 SOAP 服务器的参数的性质。 59 | 60 | ```php 61 |
107 | 108 |109 | ``` 110 | 111 | 这是在浏览器中请求俄亥俄州克利夫兰市天气预报的结果。 112 | 113 |  114 | 115 | ## 参考 116 | 117 | 关于SOAP和REST之间的区别,请参考[http://stackoverflow.com/questions/209905/representational-state-transfer-rest-and-simple-object-access-protocol-soap?lq=1](http://stackoverflow.com/questions/209905/representational-state-transfer-rest-and-simple-object-access-protocol-soap?lq=1)。 118 | 119 | -------------------------------------------------------------------------------- /mo-kuai-yi/di-qi-zhang-fang-wen-web-fu-wu/zai-php-he-xml-zhi-jian-zhuan-huan.md: -------------------------------------------------------------------------------- 1 | # 在PHP和XML之间转换 2 | 3 | 当考虑PHP本地数据类型和XML之间的转换时,我们通常会将数组作为主要目标。考虑到这一点,从PHP数组到XML的转换过程与反过来的转换过程截然不同。 4 | 5 | {% hint style="info" %} 6 | 对象也可以考虑转换;但是,在XML中很难呈现对象方法。不过,可以通过使用`get_object_vars()`函数来表示属性,该函数将对象属性读入一个数组。 7 | {% endhint %} 8 | 9 | ## 如何做... 10 | 11 | 1.首先,我们定义一个`Application\Parse\ConvertXm`l类。这个类将持有将XML转换为PHP数组的方法,反之亦然。我们将需要SPL中的`SimpleXMLElement`和`SimpleXMLIterator`类。 12 | 13 | ```php 14 | namespace Application\Parse; 15 | use SimpleXMLIterator; 16 | use SimpleXMLElement; 17 | class ConvertXml 18 | { 19 | } 20 | ``` 21 | 22 | 2. 接下来,我们定义一个`xmlToArray()`方法,它将接受一个SimpleXMLIterator实例作为参数。它将被递归调用,并从一个XML文档中产生一个PHP数组。我们利用`SimpleXMLIterator`的能力在XML文档中前进,使用`key()`、`current()`、`next()`和`rewind()`方法来导航。 23 | 24 | ```php 25 | public function xmlToArray(SimpleXMLIterator $xml) : array 26 | { 27 | $a = array(); 28 | for( $xml->rewind(); $xml->valid(); $xml->next() ) { 29 | if(!array_key_exists($xml->key(), $a)) { 30 | $a[$xml->key()] = array(); 31 | } 32 | if($xml->hasChildren()){ 33 | $a[$xml->key()][] = $this->xmlToArray($xml->current()); 34 | } 35 | else{ 36 | $a[$xml->key()] = (array) $xml->current()->attributes(); 37 | $a[$xml->key()]['value'] = strval($xml->current()); 38 | } 39 | } 40 | return $a; 41 | } 42 | ``` 43 | 44 | 3. 对于反向过程,也叫递归,我们定义了两个方法。第一个方法`arrayToXml()`,设置一个初始`SimpleXMLElement`实例,然后调用第二个方法\`phpToXml\(\)。 45 | 46 | ```php 47 | public function arrayToXml(array $a) 48 | { 49 | $xml = new SimpleXMLElement( 50 | '
设计模式 | 24 |章节 | 25 |案例 | 26 |
---|---|---|
单例 | 31 |2 | 32 |定义可见性 | 33 |
工厂 | 36 |6 | 37 |实现表格工厂 | 38 |
适配器 | 41 |8 | 42 |不使用 gettext() 处理翻译 |
43 |
代理 | 46 |7 | 47 |
48 | 创建一个简单的REST客户端 49 |创建一个简单的SOAP客户端 50 | |
51 |
迭代器 | 54 |
55 | 2 56 |3 57 | |
58 |
59 | 递归目录迭代器 60 |使用迭代器 61 | |
62 |