Laravel nesbot/carbon 库中所有方法(roundCentury、addDay、addDays...)的实现在哪里?
Where is the implementation of all the methods (roundCentury, addDay, addDays...) in nesbot/carbon library in Laravel?
我尝试查看 nesbot/carbon 供应商源代码中的所有文件,但仍然找不到一些方法的实现,例如 roundCentury、addDay、addDays... 除了 php 文档块.
因为我想知道这些方法是如何工作的。
我想知道这些方法的实现在哪里?
提前致谢
round***
动态支持任何单元,因此每个单元都没有硬编码方法,只有一个方法,__call()
负责解析方法名称,select合适的单位:
https://github.com/briannesbitt/Carbon/blob/b017c794d31626a324c8216ff222fb895306c911/src/Carbon/Traits/Rounding.php#L40
Carbon 的代码结构相当复杂,包括大量使用 PHP traits and a custom "macro" system,但最终我追踪到 Carbon\Traits\Date
的定义,它包含在主要的 类 中,例如 Carbon\Carbon
.
这并没有直接定义方法,而是实现method overloading via __call
,其中方法名称作为字符串传入。 Carbon 代码实际上 解析方法名称 来决定它应该做什么。
取整,就是调用roundMethod
,定义在另一个trait,叫做Carbon\Traits\IntervalRounding
,主线是这样的:
return $this->{$action.'Unit'}(substr($method, \strlen($action)), ...$parameters);
对于roundCentury
,$action
是“圆”,substr
部分取名字的其余部分,所以得到:
return $this->roundUnit('Century', ...$parameters);
roundUnit
的定义在 另一个 特征中,Carbon\Traits\Rounding
.
“添加...”方法的工作原理可能类似。
名称为 addDay 的函数未在 Carbon 的来源中列出。因此很难找到实际动作发生的地方。当调用 addDay 时,Traits/Date.php 中的魔法函数 __call() 被激活。它被分成一个“添加”操作和一个“日”单元,并分支到 addUnit() 方法。在那里我们会找到实际操作:
$date = $date->modify("$value $unit");
我尝试查看 nesbot/carbon 供应商源代码中的所有文件,但仍然找不到一些方法的实现,例如 roundCentury、addDay、addDays... 除了 php 文档块.
因为我想知道这些方法是如何工作的。 我想知道这些方法的实现在哪里?
提前致谢
round***
动态支持任何单元,因此每个单元都没有硬编码方法,只有一个方法,__call()
负责解析方法名称,select合适的单位:
https://github.com/briannesbitt/Carbon/blob/b017c794d31626a324c8216ff222fb895306c911/src/Carbon/Traits/Rounding.php#L40
Carbon 的代码结构相当复杂,包括大量使用 PHP traits and a custom "macro" system,但最终我追踪到 Carbon\Traits\Date
的定义,它包含在主要的 类 中,例如 Carbon\Carbon
.
这并没有直接定义方法,而是实现method overloading via __call
,其中方法名称作为字符串传入。 Carbon 代码实际上 解析方法名称 来决定它应该做什么。
取整,就是调用roundMethod
,定义在另一个trait,叫做Carbon\Traits\IntervalRounding
,主线是这样的:
return $this->{$action.'Unit'}(substr($method, \strlen($action)), ...$parameters);
对于roundCentury
,$action
是“圆”,substr
部分取名字的其余部分,所以得到:
return $this->roundUnit('Century', ...$parameters);
roundUnit
的定义在 另一个 特征中,Carbon\Traits\Rounding
.
“添加...”方法的工作原理可能类似。
名称为 addDay 的函数未在 Carbon 的来源中列出。因此很难找到实际动作发生的地方。当调用 addDay 时,Traits/Date.php 中的魔法函数 __call() 被激活。它被分成一个“添加”操作和一个“日”单元,并分支到 addUnit() 方法。在那里我们会找到实际操作:
$date = $date->modify("$value $unit");