/** * Create a dependency injection container function. * * @return the dependency injection container function */ function dependency_injection_container() : callable { $container = sequence(decorate(container(), function (array $args) use(&$container) { if (is_callable($definition = $args[1] ?? null) && !($args[2] ?? false)) { $args[1] = call_once(set_args($definition, $container)); } return $args; }), conditionally(is_callable, call_user_func, pass_through)); return $container; }
/** * 判断是否更新缓存文件 * @return bool * @throws UpaddException */ public function is_up_file() { if (!file_exists($this->file) || filemtime($this->file) < filemtime($this->routeFile)) { $data = sequence($this->routeFile, true); if (!file_put_contents($this->file, $data)) { throw new UpaddException('路由缓存失败' . $this->file, 404); } return false; } else { return true; } }
function test_sequence() { $a = function ($x) { return $x . 'a'; }; $b = function ($x) { return $x . 'b'; }; $c = function ($x) { return $x . 'c'; }; $fn = sequence($a, $b, $c); return is_identical($fn('d'), 'dabc'); }
require 'vendor/autoload.php'; require 'utils.php'; echo 'The all method example.' . PHP_EOL; $sequence = sequence(15, 0, 10, true); $result = Enumerable::from($sequence)->all(Criteria::gte(0)->and(Criteria::lte(10))); echo '- The sequence: ' . sequenceToString($sequence) . PHP_EOL; echo '- all(Criteria::gte(0)->and(Criteria::lte(10)))? ' . boolToString($result) . PHP_EOL; /*#########################################################################*/ echo 'The any method example.' . PHP_EOL; $sequence = sequence(15, 0, 10, true); $result1 = Enumerable::from($sequence)->any(Criteria::eq(5)); $result2 = Enumerable::from($sequence)->any(Criteria::eq(11)); echo '- The sequence: ' . sequenceToString($sequence) . PHP_EOL; echo '- any(Criteria::eq(5))? ' . boolToString($result1) . PHP_EOL; echo '- any(Criteria::eq(11))? ' . boolToString($result2) . PHP_EOL; /*#########################################################################*/ echo 'The atLeast method example.' . PHP_EOL; $sequence = sequence(15, 0, 10, true); $result1 = Enumerable::from($sequence)->atLeast(5, Criteria::gte(2)->and(Criteria::lte(6))); $result2 = Enumerable::from($sequence)->atLeast(2, Criteria::eq(5)); echo '- The sequence: ' . sequenceToString($sequence) . PHP_EOL; echo '- atLeast(5, Criteria::gte(2)->and(Criteria::lte(6)))? ' . boolToString($result1) . PHP_EOL; echo '- atLeast(2, Criteria::eq(5))? ' . boolToString($result2) . PHP_EOL; /*#########################################################################*/ echo 'The contains method example.' . PHP_EOL; $sequence = sequence(15, 0, 10, true); $result1 = Enumerable::from($sequence)->contains(5); $result2 = Enumerable::from($sequence)->contains(10); echo '- The sequence: ' . sequenceToString($sequence) . PHP_EOL; echo '- contains(5)? ' . boolToString($result1) . PHP_EOL; echo '- contains(10)? ' . boolToString($result2) . PHP_EOL;
function basic_review() { return sequence(lesson(name('lesson 1'), filename('bolt_sample_lesson.php?n=1')), lesson(name('lesson 2'), filename('bolt_sample_lesson.php?n=2'))); }
function getGeneralDetails($tag, $typeString = '', $whatItDoes = '') { global $tagLibrary, $tagTypes, $container, $usedTriggers, $trigLibrary, $trigTypes, $untriggeredTags, $userIdUsed, $legacyTags, $folderArray, $usedUdvs, $udvUsage; $technicalDetails = ''; $rawHTML = getParam($tag, 'html'); $deets = '<table class="table table-bordered table-striped">'; $deets = $deets . '<tr><th>Name</th><td>' . $tag['name'] . '</td></tr>'; $deets = $deets . '<tr><th>Type</th><td>' . $typeString . '</td></tr>'; $deets = $deets . '<tr><th>What it does</th>'; if ($whatItDoes === '') { if ($rawHTML !== '') { $containsScript = strpos($rawHTML, '<script') > -1 ? 'contains JavaScript' : 'contains HTML'; $deets = $deets . '<td>This tag ' . $containsScript . '. Being a custom tag, you need to make sure this is carefully reviewed by your developers.<br />'; $deets = $deets . '<textarea class="form-control" rows="10" cols="60" disabled="disabled">' . $rawHTML . '</textarea></td></tr>'; if (getParam($tag, 'supportDocumentWrite') === 'true') { $deets = $deets . '<tr><th></th><td>This tag supports document.write.</td></tr>'; } } if (getParam($tag, 'trackType') !== '') { $deets = $deets . humanDetails(getParam($tag, 'trackType'), $tag); } if (getParam($tag, 'enableEcommerce') === 'true') { $deets = $deets . '<br />This tag uses Enhanced Ecommerce tracking features.<br />'; if (getParam($tag, 'useEcommerceDataLayer') === 'true') { $deets = $deets . 'The Data Layer is used to record the Enhanced Ecommerce data (<b>Technical!</b>)<br />'; } else { if (getParamTemplate($tag, 'ecommerceMacroData') !== '' && array_key_exists('value', getParamTemplate($tag, 'ecommerceMacroData'))) { $deets = $deets . variablise(getParamTemplate($tag, 'ecommerceMacroData')['value'], $tag, true) . ' is used to record the Enhanced Ecommerce data (<b>Technical!</b>)<br />'; } } $deets = $deets . '</td></tr>'; } else { $deets = $deets . '</tr>'; } if (getParam($tag, 'trackingId') !== '') { $deets = $deets . '<tr><th>The GA property ID is</th><td>' . translateToHuman(getParam($tag, 'trackingId'), $tag, true) . '</td></tr>'; } } else { $deets = $deets . $whatItDoes; } $deets = $deets . '<tr><th>When it does it</th>'; /****************************************************************************** Firing triggers ******************************************************************************/ if (array_key_exists('firingTriggerId', $tag) && count($tag['firingTriggerId']) > 0) { $triggerFound = false; $triggerLink = ''; $firingTrigArray = []; if (count($tag['firingTriggerId']) > 1) { $triggerLink = '<td>This tag is fired by the following triggers:<ul>'; foreach ($tag['firingTriggerId'] as $tagFiringKey => $tagFiringVal) { if (!array_search($tag['firingTriggerId'][$tagFiringKey], $usedTriggers)) { array_push($usedTriggers, $tag['firingTriggerId'][$tagFiringKey]); } $triggerFound = false; foreach ($trigTypes as $trigTypeKey => $trigTypeVal) { foreach ($trigLibrary[$trigTypeVal] as $trigKey => $trigVal) { if ($tag['firingTriggerId'][$tagFiringKey] === $trigLibrary[$trigTypeVal][$trigKey]['triggerId']) { $triggerLink = $triggerLink . buildTriggerLink($tag['firingTriggerId'][$tagFiringKey], '<li>', '</li> ', $trigLibrary, $trigTypes); $triggerFound = true; } } } if ($triggerFound === false) { $triggerLink = $triggerLink . '<li>Built-in <span title="This tag will fire on literally ALL PAGES!" style="background-color: #CCC"><b>All Pages</b></span> trigger.</li>'; } } $deets = $deets . $triggerLink . '</ul></td></tr>'; } else { if (!array_search($tag['firingTriggerId'][0], $usedTriggers)) { array_push($usedTriggers, $tag['firingTriggerId'][0]); } $triggerLink = buildTriggerLink($tag['firingTriggerId'][0], '<td>This tag is fired by the ', ' trigger. </td></tr>', $trigLibrary, $trigTypes); if ($triggerLink === '') { $deets = $deets . '<td>This tag is fired by the built-in <span title="This tag will fire on literally ALL PAGES!" style="background-color: #CCC"><b>All Pages</b></span> trigger.</td></tr>'; } else { $deets = $deets . $triggerLink; } } } else { $deets = $deets . '<td>This tag <i>appears</i> to have <span title="This tag will NOT fire." style="background-color: #CCC"><b>no firing triggers</b></span>.</td></tr>'; array_push($untriggeredTags, $tag); } /****************************************************************************** Blocking triggers ******************************************************************************/ if (array_key_exists('blockingTriggerId', $tag) && count($tag['blockingTriggerId']) > 0) { $deets = $deets . '<tr><th>When it is <b>stopped</b> from doing it</th>'; $triggerFound = false; $blockingTrigArray = []; if (count($tag['blockingTriggerId']) > 1) { $triggerLink = '<td>This tag is blocked by the following triggers.<ul>'; foreach ($tag['blockingTriggerId'] as $blockingTrigKey => $blockingTrigVal) { $triggerFound = false; foreach ($trigTypes as $trigTypeKey => $trigTypeVal) { foreach ($trigLibrary[$trigTypeVal] as $trigKey => $trigVal) { if ($tag['blockingTriggerId'][$blockingTrigKey] === $trigLibrary[$trigTypeVal][$trigKey]['triggerId']) { $triggerLink = $triggerLink . buildTriggerLink($tag['blockingTriggerId'][$blockingTrigKey], '<li>', '</li> '); $triggerFound = true; } } } if ($triggerFound === false) { $triggerLink = $triggerLink . '<li>Built-in <span title="This tag will be blocked on literally ALL PAGES!" style="background-color: #CCC"><b>All Pages</b></span> trigger.</li>'; } } $deets = $deets . $triggerLink . '</ul></td></tr>'; } else { $triggerLink = buildTriggerLink($tag['blockingTriggerId'][0], '<td>This tag is <b>BLOCKED</b> by the ', ' trigger. </td></tr>', $trigLibrary, $trigTypes); if ($triggerLink === '') { $deets = $deets . '<td>This tag is <b>BLOCKED</b> by the built-in <span title="This tag be blocked on literally ALL PAGES!" style="background-color: #CCC"><b>All Pages</b></span> trigger.</td></tr>'; } else { $deets = $deets . $triggerLink; } } } if (array_key_exists('scheduleStartMs', $tag)) { $deets = $deets . '<tr><th>Custom firing schedule start</th><td>The tag will only be live from ' . date('Y-m-d H:i:s', (int) $tag['scheduleStartMs'] / 1000); $nowDate = new DateTime(); $startDate = new DateTime(); $startDate->setTimestamp((int) $tag['scheduleStartMs'] / 1000); $interval = date_diff($nowDate, $startDate); if ($interval->invert === 1) { $deets = $deets . ' - this tag went live ' . $interval->format('%a days ago') . '.</td><tr>'; } if ($interval->invert === 0) { $deets = $deets . ' - this will go live in ' . $interval->format('%a days') . '.</td><tr>'; } } if (array_key_exists('scheduleEndMs', $tag)) { $deets = $deets . '<tr><th>Custom firing schedule end</th><td>The tag will only be live before ' . date('Y-m-d H:i:s', (int) $tag['scheduleEndMs'] / 1000); $nowDate = new DateTime(); $endDate = new DateTime(); $endDate->setTimestamp((int) $tag['scheduleEndMs'] / 1000); $interval = date_diff($nowDate, $endDate); if ($interval->invert === 1) { $deets = $deets . ' - this tag ended ' . $interval->format('%a days ago') . '. </td><tr>'; } if ($interval->invert === 0) { $deets = $deets . ' - this tag will end in ' . $interval->format('%a days') . '.</td><tr>'; } } /****************************************************************************** Sequencing ******************************************************************************/ $deets = $deets . sequence($tag); /****************************************************************************** Firing priority ******************************************************************************/ $deets = $deets . priority($tag); /****************************************************************************** Firing Options ******************************************************************************/ $humanFiringOption = array_key_exists('tagFiringOption', $tag) ? translateToHuman($tag['tagFiringOption'], $tag) : false; if ($humanFiringOption !== false) { $deets = $deets . '<tr><th></th><td>' . $humanFiringOption . '</td></tr>'; } /****************************************************************************** Published containers ******************************************************************************/ if ($tag['liveOnly'] === 'true') { $deets = $deets . '<tr><th></th><td>This tag will only fire in published containers</td></tr>'; } $deets = $deets . '<tr><th>Where it lives</th>'; if (array_key_exists('parentFolderId', $tag)) { $deets = $deets . '<td>' . folderisation($tag['parentFolderId'], 'tag') . '</td></tr>'; } else { $deets = $deets . '<td>' . folderisation(null, 'tag') . '</td></tr>'; } if ($rawHTML !== '') { $varRefs = getVarRefs($rawHTML, $tag); if ($varRefs !== '') { $technicalDetails = $technicalDetails . 'Variables referenced in this tag:<br />' . $varRefs; } } /****************************************************************************** Fields to Set (UA only) ******************************************************************************/ $technicalDetails = $technicalDetails . fieldsToSet($tag); /****************************************************************************** Custom Dimensions ******************************************************************************/ $technicalDetails = $technicalDetails . dimensions($tag); /****************************************************************************** Custom Metrics ******************************************************************************/ $technicalDetails = $technicalDetails . metrics($tag); /****************************************************************************** Custom Variables ******************************************************************************/ $technicalDetails = $technicalDetails . cvars($tag); /****************************************************************************** Mop up gnarly details ******************************************************************************/ $technicalDetails = $technicalDetails . getGnarlyDetails($tag); if ($technicalDetails !== '') { $deets = $deets . '<tr><th></th><td>' . $technicalDetails . '</td></tr>'; } $deets = $deets . '</table><br />'; return $deets; }
require 'vendor/autoload.php'; require 'utils.php'; echo 'The distinct method example.' . PHP_EOL; $sequence = sequence(15, 0, 5); $distinct = Enumerable::from($sequence)->distinct(); echo '- The original sequence: ' . sequenceToString($sequence) . PHP_EOL; echo '- The distinct sequence: ' . sequenceToString($distinct) . PHP_EOL; /*#########################################################################*/ echo 'The except method example.' . PHP_EOL; $first = sequence(15, 0, 5); $second = sequence(5, 2, 4); $except = Enumerable::from($first)->except($second); echo '- The first sequence: ' . sequenceToString($first) . PHP_EOL; echo '- The second sequence: ' . sequenceToString($second) . PHP_EOL; echo '- The except sequence: ' . sequenceToString($except) . PHP_EOL; /*#########################################################################*/ echo 'The intersect method example.' . PHP_EOL; $first = sequence(15, 0, 5); $second = sequence(5, 2, 4); $intersect = Enumerable::from($first)->intersect($second); echo '- The first sequence: ' . sequenceToString($first) . PHP_EOL; echo '- The second sequence: ' . sequenceToString($second) . PHP_EOL; echo '- The intersect sequence: ' . sequenceToString($intersect) . PHP_EOL; /*#########################################################################*/ echo 'The union method example.' . PHP_EOL; $first = sequence(10, 0, 5); $second = sequence(10, 4, 8); $union = Enumerable::from($first)->union($second); echo '- The first sequence: ' . sequenceToString($first) . PHP_EOL; echo '- The second sequence: ' . sequenceToString($second) . PHP_EOL; echo '- The union sequence: ' . sequenceToString($union) . PHP_EOL;
function render_jsx($jsx, $id = null) { if (!$id) { $id = 'jsx-' . sequence('jsx'); } $content = "\n\t\t\t" . implode("\n\t\t\t", array_map(function ($item) { return trim($item); }, explode("\n", trim($jsx)))); context('jsx_script', "React.render({$content}\n\t\t\t, document.getElementById('{$id}'));", true); return $id; }