我无法解决PHP中类型提示的重要性.
显然,PHP中的"类型提示"可以定义如下:
"类型提示"强制您仅传递特定类型的对象.这可以防止您传递不兼容的值,并在您与团队等合作时创建标准.
因此,在最基本的级别提示类型,不需要实际使代码工作吗?
我有以下代码试图了解发生了什么......
的index.php
<?php
include 'Song.php';
$song_object = new Song;
$song_object->title = "Beat it!";
$song_object->lyrics = "It doesn't matter who's wrong or right... just beat it!";
function sing(Song $song)
{
echo "Singing the song called " . $song->title;
echo "<p>" . $song->lyrics . "</p>";
}
sing($song_object);
Run Code Online (Sandbox Code Playgroud)
Song.php
<?php
class Song
{
public $title;
public $lyrics;
}
Run Code Online (Sandbox Code Playgroud)
代码在函数sing()中使用或不使用小类型提示来执行其操作;
因此,这使我相信类型提示只是一种编码约定,以确保只使用某些类并且不需要生成功能代码,这是正确的吗?
如上所述,类型提示可以在您与团队合作时创建标准.
我在这里错过了什么吗?
一些背景:
我的网站在很大程度上依赖于协调各种不同时区的用户.
我正在使用Carbon来处理客户端上服务器端和moment.js的时区转换和计算.
因此,设计选择是将所有日期时间(例如,事件的开始时间)存储为unix时间戳.
问题
我对"时间戳"的定义感到有点困惑.在PHPMyAdmin中,时间戳不是unix时间戳,而是日期格式:
2016-10-06 20:50:46
Run Code Online (Sandbox Code Playgroud)
因此,如果您想拥有当前时间戳的默认字段,那么您将获得GMT中的当前日期.
与unix时间戳整数相比,这使得转换回用户时区变得更加复杂......
题:
我应该将我的unix时间戳存储为什么字段类型,目前我使用int(11)的是默认值none.通过扩展...有没有办法在MySQL中默认存储当前的unix时间戳(例如1475971200)?
我只是想遵循一个教程,该教程告诉我安装 node-sass 和 sass-loader。当我这样做时,我收到以下错误:
ERROR Failed to compile with 1 errors 6:21:28 PM
error in ./src/components/TodoList.vue
Module build failed: TypeError: this.getResolve is not a function
at Object.loader (C:\xampp\htdocs\projects\todo-vue\node_modules\sass-loader\dist\index.js:52:26)
@ ./node_modules/vue-style-loader!./node_modules/css-loader/dist/cjs.js?{"sourceMap":true}!./node_modules/vue-loader/lib/style-compiler?{"vue":true,"id":"data-v-3de47834","scoped":false,"hasInlineConfig":false}!./node_modules/sass-loader/dist/cjs.js?{"sourceMap":true}!./node_modules/vue-loader/lib/selector.js?type=styles&index=0!./src/components/TodoList.vue 4:14-377 13:3-17:5 14:22-385
@ ./src/components/TodoList.vue
@ ./node_modules/babel-loader/lib!./node_modules/vue-loader/lib/selector.js?type=script&index=0!./src/App.vue
@ ./src/App.vue
@ ./src/main.js
@ multi (webpack)-dev-server/client?http://localhost:8080 webpack/hot/dev-server ./src/main.js
Run Code Online (Sandbox Code Playgroud)
我的 package.json 文件
{
"name": "todo-vue",
"version": "1.0.0",
"description": "A Vue.js project",
"author": "Jethro Hazelhurst <j.hazelhurst1994@gmail.com>",
"private": true,
"scripts": {
"dev": "webpack-dev-server --inline --progress --config build/webpack.dev.conf.js",
"start": "npm run dev",
"build": "node build/build.js"
}, …Run Code Online (Sandbox Code Playgroud) 背景
我正在尝试将视频集成到幻灯片演示应用程序中.我已禁用学生端的控件,并且有一个播放/暂停按钮连接到YouTube API,以便在单击时通过推送器触发事件,并且视频将在教师屏幕和学生屏幕上启动.
难点
当其中一个用户的互联网连接速度较慢时,就会出现问题.如果教师的互联网速度比学生快,那么视频将不同步.
我的方法
我有一个功能,它使用YouTube API来控制视频的播放和暂停.
/**
*
*/
togglePlay: function(){
var videoId = this.videoId;
if (this.isPlaying) {
this.players[videoId].pauseVideo(); // Pauses the video
this.isPlaying = false;
} else {
this.players[videoId].playVideo(); // Starts the video
this.isPlaying = true;
}
},
Run Code Online (Sandbox Code Playgroud)
在视频对象内部,我添加了一个onStateChange事件监听器,在视频播放/暂停/缓冲时触发.该事件将发送到此功能.
/**
*
*/
emittStateChange: function(e){
switch(e.data) {
// if the teachers video is...
case 1: // playing
pusher.channel4.trigger('client-youtube-triggered', {
videoId: youtube.videoId,
status: 1, // start the students video
});
break;
case 2: // paused
pusher.channel4.trigger('client-youtube-triggered', { …Run Code Online (Sandbox Code Playgroud) 我正在尝试Range()使用websockets在客户端浏览器上重建对象.
https://jsfiddle.net/k36goyec/
首先,我在浏览器中获取Range对象,以及范围开始的Node:
var range = window.getSelection().getRangeAt(0);
var node = range.startContainer
Run Code Online (Sandbox Code Playgroud)
我通过websockets将三个参数传递给客户端浏览器上的范围构建器函数.
var text = node.parentNode.textContent;
var startOffset = range.startOffset
var endOffset = range.endOffset
Run Code Online (Sandbox Code Playgroud)
这个数据传递给我的buildRange函数:
/**
*
*/
buildRange: function(text, startOffset, endOffset){
var node = this.getNodeByText(text); // get the Node by its contents
var range = document.createRange();
range.setStart(node, startOffset);
range.setEnd(node, endOffset);
span = document.createElement('span');
span.style.backgroundColor = this.color;
$(span).addClass('hl');
range.surroundContents(span);
},
Run Code Online (Sandbox Code Playgroud)
正如您在下面看到的,我通过遍历页面上的所有元素并将其内容与文本进行比较来获取客户端浏览器上的节点:
/**
*
*/
getNodeByText: function(text){
var all = document.getElementsByTagName("*");
for (var i = 0; i …Run Code Online (Sandbox Code Playgroud) 背景
这是一个非常困难的问题,我几天来一直在努力.我试图以幻灯片格式显示课程.所以课程由不同的幻灯片组成.现在覆盖在每张幻灯片的顶部的是一个画布元素,它适合屏幕的大小.
canvas.width = document.body.clientWidth;
canvas.height = document.body.clientHeight;
Run Code Online (Sandbox Code Playgroud)
这允许教师在画布上绘制笔记并突出显示课程的部分内容.
问题
幻灯片的内容由HTML组成,加载幻灯片时看起来像这样.
当我调整页面大小时......
所以这里的问题是画布'图像'根据页面与CSS的宽高比调整大小.
#theCanvas {
position:fixed;
top:0;
right:0;
bottom:0;
left:0;
}
Run Code Online (Sandbox Code Playgroud)
但实际的HTML保持相同的大小,但重新排列其换行点,不好.
我试过了什么
首先,我使用CSS根据窗口的宽度和高度调整所有HTML元素的大小:
h1 {
font-family: 'Open Sans Condensed', sans-serif;
color: #222222;
font-weight: 200;
font-size: 5.9vw;
}
h2 {
font-family: 'Open Sans Condensed', sans-serif;
color: #222222;
font-weight: 200;
font-size: 3.0vh;
}
h4 {
font-family: 'Open Sans Condensed', sans-serif;
color: #444444;
font-weight: 200;
font-size: 2vmin;
}
p {
font-family: 'Open Sans Condensed';
font-size: 2vmin;
font-weight: 200;
}
Run Code Online (Sandbox Code Playgroud)
接下来我使用以下方法保存并调整画布图像的大小:
window.onresize = …Run Code Online (Sandbox Code Playgroud) 我试图理解依赖注入容器的作用,因为它使我成为可维护代码的基础.
据我了解,DIC正如标题所暗示的那样:一个容器,其中所有依赖项都被收集在一起.new Foo\Bar所有新实例都是在容器内部生成的,而不是遍及整个应用程序,然后在需要它们的地方传递给彼此(例如,Model用实例实例化,实例Database化实例Config).
我试图制作一个非常简单的 DIC.这是结果.
在我的前端控制器中,我正在实例化一个新的App\Core\Container.
我Container看起来像这样:
<?php
namespace App\Core;
use App\Config;
class Container
{
public $config;
public $router;
public $database;
public $model;
public $view;
public $controller;
public function __construct()
{
$this->config = new Config;
$this->router = new Router;
$this->database = new Database($this->config);
}
public function add()
{
// add dependencies from the outside?
}
public function getInstance(/* string */)
{
// return an instance for use …Run Code Online (Sandbox Code Playgroud) 使用Angular2无法越过起跑线...出于某种原因,我无法运行lite-server,因为有......
最有可能是angular-quickstart包的问题
当我跑步时,npm start我得到:
> angular-quickstart@1.0.0 start C:\xampp\htdocs\js\angular2\quickstart
> tsc && concurrently "tsc -w" "lite-server"
Error occured when executing command: tsc -w
Error: Unable to detect platform shell type. Please set SHELL_EXECUTE_FLAG env variable.
at detectExecuteFlag (C:\xampp\htdocs\js\angular2\quickstart\node_modules\concurrently\node_modules\spawn-default-shell\src\get-shell.js:29:9)
at getShell (C:\xampp\htdocs\js\angular2\quickstart\node_modules\concurrently\node_modules\spawn-default-shell\src\get-shell.js:37:18)
at Object.spawn (C:\xampp\htdocs\js\angular2\quickstart\node_modules\concurrently\node_modules\spawn-default-shell\src\index.js:5:24)
at C:\xampp\htdocs\js\angular2\quickstart\node_modules\concurrently\src\main.js:192:34
at arrayMap (C:\xampp\htdocs\js\angular2\quickstart\node_modules\lodash\lodash.js:660:23)
at Function.map (C:\xampp\htdocs\js\angular2\quickstart\node_modules\lodash\lodash.js:9571:14)
at run (C:\xampp\htdocs\js\angular2\quickstart\node_modules\concurrently\src\main.js:181:22)
at main (C:\xampp\htdocs\js\angular2\quickstart\node_modules\concurrently\src\main.js:61:5)
at Object.<anonymous> (C:\xampp\htdocs\js\angular2\quickstart\node_modules\concurrently\src\main.js:421:1)
at Module._compile (module.js:409:26)
at Object.Module._extensions..js (module.js:416:10)
at Module.load (module.js:343:32)
at Function.Module._load (module.js:300:12)
at Function.Module.runMain (module.js:441:10)
at startup (node.js:139:18) …Run Code Online (Sandbox Code Playgroud) 我的联盟脚本跟踪下订单后的转化。它在动作挂钩内运行woocommerce_thankyou:
function affiliate_tracking_code( $order_id ) {
// get the order info for the script
?>
<script>
// affiliate script here
</script>
<?php
}
add_action( 'woocommerce_thankyou', 'affiliate_tracking_code', 10, 1 );
Run Code Online (Sandbox Code Playgroud)
如果订单失败或待处理,我不希望触发此脚本。只要成功的话。我在文档中找不到woocommerce_thankyou除了成功订单之外是否会触发操作挂钩。
如果确实如此,那么确保我的脚本仅跟踪成功订单而不跟踪失败订单的转化的最佳方法是什么?
我测试过的一种方法是将我的脚本包装在 if 和 check 中if ( $order->get_status() == 'processing' ) : // run the script,但是我不确定是否存在隐藏的漏洞。
出于某种原因,我的 jQuery 拒绝加载。我收到一个错误:
参考错误:$ 未定义
我的模板在views/layouts/editor.blade.php,我正在像这样在模板的头部加载 jQuery
<script src="{{ asset('js/jquery.min.js') }}"></script>
Run Code Online (Sandbox Code Playgroud)
我可以看到 jQuery 已加载到我的控制台中。但我仍然收到错误。
我正在使用 laravel mix 编译我的 javascript,我的 webpack.mix.js 文件如下所示:
// javascript
mix.js('resources/assets/js/app.js', 'public/js')
.js('node_modules/jquery/dist/jquery.min.js', 'public/js')
.autoload({
jquery: ['$', 'window.jQuery', 'jQuery'],
});
// css
mix.sass('resources/assets/sass/app.scss', 'public/css')
.sass('node_modules/bootstrap/scss/bootstrap.scss', 'public/css');
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
编辑:
我的模板文件如下所示:
<!DOCTYPE html>
<html lang="{{ app()->getLocale() }}">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>{{ config('app.name', 'Laravel') }}</title>
<!-- Styles -->
<link href="{{ asset('css/bootstrap.css') }}" …Run Code Online (Sandbox Code Playgroud) php ×5
javascript ×3
html ×2
jquery ×2
oop ×2
angular ×1
canvas ×1
css ×1
css3 ×1
date ×1
datetime ×1
dom ×1
laravel ×1
laravel-5 ×1
laravel-mix ×1
mysql ×1
node-sass ×1
node.js ×1
npm ×1
orders ×1
pusher ×1
range ×1
sass-loader ×1
type-hinting ×1
typescript ×1
unix ×1
vue.js ×1
websocket ×1
woocommerce ×1
wordpress ×1
youtube-api ×1