下面说说我自己提交 到GitHub上的代码中的注意事项
1. 目录结构:
根目录下 创建 src 目录 用来存放 源代码, 创建examples目录存放 示例代码
2. 类名与文件名
我的类名是 RequireInsensitivity 文件内容如下
<?php
/**
* Created by IcePHP Framework.
* User: 蓝冰大侠
* Date: 2018/8/9
* Time: 10:11
*/
/**
* icePHP框架的一部分,独立使用
*/
namespace icePHP;
/**
* 不区分大小写的查找文件并包含
* Class RequireInsensitivity
* @package icePHP
*/
class RequireInsensitivity
{
/**
* 不区分大小写的查找文件并包含(路径区分大小写,文件名不区分)
* @param $filename string 文件全路径
* @return bool|mixed
*/
public static function read(string $filename)
{
//小写文件名
$baseLower = strtolower(basename($filename));
//目录
$dirName = str_replace(['/', '\\'], DIRECTORY_SEPARATOR, dirname($filename));
//目录不存在
if (!is_dir($dirName)) {
return false;
}
//此目录下的所有 文件 及文件 夹
$dir = dir($dirName);
//遍历 查看
while ($file = $dir->read()) {
//文件夹略过
if ($file == '.' or $file == '..' or is_dir($dirName . '/' . $file)) {
continue;
}
//不区分大小写并匹配
if (strtolower($file) == $baseLower) {
return require_once($dirName . '/' . $file);
}
}
//未找到
return false;
}
}
注意文件名要与类名相一致(包括大小写), /src/RequireInsensitivity.php , 不要加 诸如.class.php/ .system.php之类的后缀
2.命名空间:
我的项目代码统一命名空间为 icePHP , 这里就出现一个问题, github 的repository 中是不允许出现 大写字母的, 所以我在github上的 repository是 ice-php/require-insensitivity
3. composer.json 写法
{
"name": "ice-php/require-insensitivity",
"description": "icePHP require insensitivity",
"keywords": [
"icePHP",
"require",
"sensitivity"
],
"homepage": "https://github.com/ice-php/require-insensitivity",
"type": "composer",
"license": "MIT",
"support": {
"source": "https://github.com/ice-php/require-insensitivity"
},
"authors": [
{
"name": "blueice",
"email": "liyong@nenu.edu.cn"
}
],
"require": {
"php": ">=7.1.0"
},
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"icePHP\\": "src"
}
},
"config": {
"process-timeout": 1800
}
}
这个文件放在根目录 , 其中要注意
name是 github中的repository的名称, 而 psr-4中的键, 是 命名空间的名称 ,值是源代码目录名, 我在这个地方卡死半天的时间, 不是repository名称,也不是命名空间+类名, 也不是类名 , 只是命名空间名称
4. composer update
在这之后 会出现 vendor 目录 这个目录 不要提交 到github上, .lock文件也不要提交
5.示例代码
这个文件名无所谓, 我的是 /examples/index.php
<?php
//包含类文件
require '../vendor/autoload.php';
//引入类定义
use icePHP\requireInsensitivity;
/**
* 打印一个不存在的文件包含
* 结果: flase
*/
var_dump(requireInsensitivity::read('none.php'));
/**
* 打印一个示例文件包含
* 结果:
* array['被包含的文件']
*/
var_dump(requireInsensitivity::read('included.php'));
6. 测试运行
命令行运行
7.整体提交github
8.packagist 上 update
9.本地另起一项目, 我的是 ice-php/config
10.在这个项目中, 包含 ice-php/require-insensitivity
{
"name": "ice-php/config",
"description": "icePHP multi config",
"keywords": [
"icePHP",
"config"
],
"homepage": "https://github.com/ice-php/config",
"type": "composer",
"license": "MIT",
"support": {
"source": "https://github.com/ice-php/config"
},
"authors": [
{
"name": "blueice",
"email": "liyong@nenu.edu.cn"
}
],
"require": {
"php": ">=7.1.0",
"ice-php/require-insensitivity":">=1.0.1"
},
"minimum-stability": "dev",
"autoload": {
"psr-4": {
"icePHP\\": "src"
}
},
"repositories": {
"packagist": {
"type": "composer",
"url": "https://packagist.org"
}
},
"config": {
"process-timeout": 1800
}
}
11.在config项目中, composer update
12. 在config代码中引入 requireInsensitivity
<?php
/**
* icePHP框架的一部分,独立使用
*/
namespace icePHP;
use icePHP\RequireInsensitivity;
......
//逐个配置文件目录查找
foreach (self::$dirs as $dir) {
$content = RequireInsensitivity::read($dir . DIRECTORY_SEPARATOR . $fullName);
if ($content) return $content;
}
......
以上知识 应该是PHP开发人员的基本技能 . 很惭愧, 刚刚开始学习, 而且 周边没有同事可以讨论.只能 独自前行.
作为一个老龄PHPer, 坚持下去, ......