PHP是我的第一个编程语言.在使用静态类和实例化对象时,我无法完全理解.
我意识到你可以复制和克隆对象.但是在我使用php的所有时间中,任何对象或函数总是最终作为单个返回(数组,字符串,整数)值或void.
我理解书中的概念,比如电子游戏角色类.复制汽车对象,并使新的一个红色,这一切都有意义,但不是它在PHP和Web应用程序中的应用程序.
一个简单的例子.一个博客.博客的哪些对象最好实现为静态或实例化对象?DB类?为什么不在全局范围内实例化db对象?为什么不让每个对象都静止呢?性能怎么样?
这一切都只是风格吗?有没有正确的方法来做这些事情?
是否可以检查没有启动会话的会话?
我问的原因是,我正在开发的应用程序有一个集成的管理界面.因此,当管理员登录时,他们浏览与用户相同的页面以进行编辑.字段和选项基于用户privs显示.
这导致了两个问题.
一个是因为会话正在启动,我无法启用浏览器缓存功能,因为发送的标头始终是:
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Run Code Online (Sandbox Code Playgroud)
我使用smarty输出模板,并且无法实现:
$smarty->cache_modified_check = true;
Run Code Online (Sandbox Code Playgroud)
发送304未修改,因为会话已经启动.使用上面的smarty param将是我浏览器缓存的完美解决方案.
二是因为每个使用该站点的人都在启动一个会话,会话目录中充满了不需要的会话.
如果用户没有登录,我可以破坏会话,但是每个页面加载,用户将创建和删除会话.这是不好的做法吗?
因此,如果我可以检查是否存在活动会话而不启动,我的所有问题都将得到解决.有任何想法吗?浏览器在请求页面时是否发送会话cookie?
if (session_exists) {
session_start();
$users->priv = $_SESSION['priv'];
}
else {
$users->priv = guest;
}
Run Code Online (Sandbox Code Playgroud)
---------------回应Tony Miller ---------------
使用session_id()时,您必须已经启动会话以返回id.
session_start();
echo session_id($_SESSION);
Run Code Online (Sandbox Code Playgroud)
或者您可以在调用会话开始之前为会话设置ID
session_id("adfasdf");
session_start();
echo session_id($_SESSION);
//prints "adfasdf"
Run Code Online (Sandbox Code Playgroud)
这些都不能帮助我.除非我遗漏了什么.
最近我看到越来越多的设计文章鼓励使用印刷报价(Curly Quotes)在网页上使用直引号.
虽然我同意印刷,但正确的引用更具吸引力,并为设计添加了一个很好的触摸,我想知道从编码的角度来看它实际上是否更好.
我发现这些引号也不会在文档中复制和粘贴,也不一定要刮掉,并且最终会出现烦人的缺失字符符号.没关系,当它们被用在示例代码块中时,我讨厌它.
我对文本编码知之甚少,所以我想知道是否有人对此主题有任何建议?
是"则更好或更可靠“
编辑:此问题主要适用于内容区域,其中<q>或<blockquote>在语义上不是最佳选项.还有像复数之类的东西.
我有很多表结构和更新复选框表单.
目标是使用users_project表将users表与projects表相关联.这样,每个项目可以有很多用户,每个用户可以有很多项目.
每个用户编辑页面上的表单看起来都是这样的
<form action="#" method="post">
<div>
<input type="checkbox" name="project_id[]" id="1" value="1">
<label for="1">project 1</label>
<br>
<input type="checkbox" name="project_id[]" id="2" value="2">
<label for="2">project 2</label>
<br>
<input type="hidden" name="editing">
<input type="submit" id="submit" value="submit">
</div>
</form>
Run Code Online (Sandbox Code Playgroud)
用户表
+----+-----------+
| id ¦ username ¦
+----+-----------+
| 1 ¦ user 1 ¦
| 2 ¦ user 2 ¦
+----+-----------+
Run Code Online (Sandbox Code Playgroud)
项目表
+----+-----------+
¦ id ¦ title ¦
+----+-----------+
| 1 ¦ project 1 ¦
| 2 ¦ project 2 ¦
+----+-----------+
Run Code Online (Sandbox Code Playgroud)
user_projects表
该表基于它们的id来关联上面的两个表
+----+-------------+---------+ …Run Code Online (Sandbox Code Playgroud) 这是一个非常初学者的一系列问题,但在阅读了30篇优秀的SPARQL教程之后,我似乎无法理解SPARQL是什么或如何开始使用它.
我见过的RDFA示例非常鼓舞人心.我目前是使用微格式的主要支持者,但我真的想更进一步.我目前使用PHP开发,但只找到了一个Java库.
刚开始使用SVN.这是我在阅读了几篇文章,教程和玩了几个小时之后的一组非常基本的问题.
当我创建一个回购时,它应该包含我的所有项目还是只有一个?在一些项目上运行导入后,我添加的每个新项目的修订计数都会增加,这似乎很奇怪.
如果我自己工作,标签和分支仍然是必要的和良好的做法?
你怎么知道何时提交一个项目?特别是从头开始写它?
在夜晚结束时,你总是承诺你的工作吗?或者你把它留下来检查?
您是否始终保留项目的导出副本?如果SVN DB borks怎么办?你能从borking恢复吗?如果它确实是bork并且我只有一个签出的副本,我是否必须自己删除所有的.svn目录?这样做会等同于导出的副本吗?您是否将导出的标签存档?
我是否需要直接访问存储库目录?隐藏这个目录会更好吗?(使用svn)
是否有更简单的方法来进行结账并导入然后输入整个文件路径(file:/// Applications/MAMP/SVN /)?我可以设置一次我将永远使用的回购吗?
编辑感谢清除所有这些问题.还有关于gui的建议.我通过textmate建立起来,令人难以置信的令人难以置信.仍然必须在CL上进行初始导入和结帐但是......
我目前正在使用PDO在PHP中编写CRUD类.
我喜欢准备语句提供的安全性,但我听说他们也阻止像mysql这样的数据库使用queryCache.
当您一次只进行一次选择时,使用准备好的Select语句会更好吗?或者只是$ pdo-> quote()就足够了安全立场(或者还有其他任何优点,比如缓存?).
我的所有更新,删除和插入都是使用预准备语句完成的.我只是对选择感到好奇.
就前端可用性和PHP DATE_TIME验证而言,这是一个双重问题.
我正在为一个想要添加项目完成日期的客户的网站工作(因此可以按顺序列出项目).他将是唯一一个使用管理界面的人,所以我希望它尽可能简单.
我将日期存储为SQLite数据库中的DATE_TIME.
我想要求客户至少输入年份和月份,并选择将日,小时,分钟,秒添加到DATE_TIME.如果未设置,则默认为最小数字.
我认为最好的方法也是最简单的方法是使输入(左)和结果(右)的单个输入形式.让他使用xxxx/xx/xx/xx/xx/xx作为格式.
2009/08 = 2009-08-01 00:00:01
2009/08/01 = 2009-08-01 00:00:01
2009/08/01/05 = 2009-08-01 05:00:01
Run Code Online (Sandbox Code Playgroud)
(默认添加一秒,否则将是前一天)
我首先尝试将输入爆炸成数组并使用正则表达式验证每个日期部分.它真的很乱,我无法弄清楚如何验证适当的范围,比如/ [1980-2009] /或/ [01-12] /(这不像我预期的那样工作).此外,/ [(0-9){2}] /显然不适用于本月.
另一个选项是使每个日期部分成为单独的选择字段.使每个字段在一个月后可选.但是在html输出中变得混乱,同样假设每个月没有31天,我需要一些javascript来改变日期字段,具体取决于选择的月份.这太多了.使用单个字段似乎也更容易,更快捷.
你们建议什么是输入和验证自定义日期时间的最佳方式?