PHP 5.6
有一些方法可以定义使用时显示的日期格式error_log吗?
我用它来记录某个脚本的消息和错误.似乎set_error_handler 不会处理所有错误消息.
在某些例子中,人们将日期date直接添加到参数上error_log.使用这种方法会导致我在日志文件中重复日期字符串.
我想输出一个ISO格式的本地日期时间,但是php -f script.php我所使用的CLI()和Apache之前的日期
ini_set('log_errors', 1);
ini_set('error_log', 'file.log');
error_log('Test');
Run Code Online (Sandbox Code Playgroud)
是这样的:
[14-Feb-2016 18:07:31 America/Mexico_City] Test
Run Code Online (Sandbox Code Playgroud)
注意到在大多数代码示例中,日期格式通常不包括时区.如果我从控制台运行它,我不会得到前置日期:
$ php -r 'error_log("Test");'
Test
Run Code Online (Sandbox Code Playgroud)
时区未在运行时或php.ini中设置,但正确表示.我在php5.6.18包上得到了这个行为,并从源代码php5.6.13编译.在生产服务器上,脚本正在通过CLI运行,没有安装apache.
看来error_log显示的日期不可自定义.set_error_handler按照@ fusion3k的建议继续前进我将这个错误处理程序放在一起,它将使用更加计算机/人性化的格式格式化日期,消息和错误级别
// set_trigger_error only accepts E_USER_ constants values
define('ERROR', 256); // Before E_USER_ERROR
define('INFO', 512); // Before E_USER_WARNING
define('DEBUG', 1024); // Before E_USER_NOTICE
function errorHandler ($errType, $errStr, $errFile, $errLine, $errContext) {
$displayErrors = ini_get( 'display_errors' );
$logErrors = …Run Code Online (Sandbox Code Playgroud) 对于嵌入式系统,这是C"中的"static const"与"#define"的情况.
在具有"传递"代码和模块的大/中项目中,为包含文件,模块等编写常量参数的最佳实践是什么?
在代码"pass-down"中,您不知道您选择的名称是在其他包含文件中定义的,还是可能在extern中调用,或者在可能包含您文件的其他文件中调用.
有这三个选项:
static const int char_height = 12;#define CHAR_HEIGHT 12enum { char_height = 12 };哪一个会更好(在具有未知内存限制的嵌入式系统上)?
原始代码主要#define用于此,但这些常量是以几种方式随意实现的(并且在不同的位置甚至在相同的文件中),因为似乎有几个人为某个设备开发了这个演示软件.
具体来说,这是一个演示代码,展示了某个设备的每个硬件和SDK功能.
我正在考虑的大多数数据是用于配置环境的类型:屏幕尺寸,字符集特征,以及提高代码可读性的东西.不是编译器和预处理器可以执行的自动配置.但由于那里有很多代码,我担心全局名称冲突,我不愿意使用#define's
目前,我正在考虑从头开始重写项目并重新实现大多数已编写的函数以从一个c文件中获取常量或将常量的实现重新组织为一种样式会更好.
但:
我刚刚开始使用PDO,并在几个教程中查找答案,但我无法使其工作.
我有
Notice: Undefined property: PDOStatement::$fetch in E:\-------- on line 22
Result: 1
Run Code Online (Sandbox Code Playgroud)
同
$dsn = "mysql:host=localhost;dbname=the_database;";
try {
$dbh = new PDO($dsn, "root", "");
$dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
} catch (PDOException $e){
die( "failed conexion: ".$e->getMessage() );
}
$query = "SELECT MAX(price) AS max, MIN(price) AS min FROM cellphones";
try {
$sth = $dbh->prepare($query);
$sth->execute();
$sth->setFetchMode(PDO::FETCH_ASSOC);
$result = $sth->fetchAll;
}
catch(PDOException $e){
echo $e->getMessage();
}
die( "<br />Result: ".print_r($result, true) );
Run Code Online (Sandbox Code Playgroud)
我得到了相同的结果
$sth = $dbh->query($query);
$result = $sth->fetchAll;
Run Code Online (Sandbox Code Playgroud)
和 …
如 Scaffold's of method手册中所述,将小吃店显示为动作的输出需要为 Scaffold.of() 创建一个子上下文。
但是我找不到这里描述的这种更“有效的方法”的例子。
更有效的解决方案是将您的构建功能拆分为多个小部件。这引入了一个新的上下文,您可以从中获取 Scaffold。在此解决方案中,您将拥有一个外部小部件,用于创建由新内部小部件的实例填充的 Scaffold,然后在这些内部小部件中您将使用 Scaffold.of。
我想使用这种方法,因为所有递归缩进都很难阅读。我已经尝试使用函数创建表单的提交按钮,甚至尝试扩展 RaisedButton 类(因此Scaffold.of将在文档中指出的新实例化 Widget 中调用)无济于事。
只有当我Builder在Scaffold我的应用程序的主要内容中使用另一个时它才有效。
这有效
class MyForm extends StatefulWidget {
Login({Key key, this.title}) : super(key: key);
final String title;
@override
_MyFormState createState() => new _MyFormState();
}
class _MyFormState extends State<MyForm> {
@override
Widget build(BuildContext context) {
final GlobalKey<FormState> _formKey = new GlobalKey<FormState>();
return new Scaffold(
body: new Builder(
builder: (BuildContext context) {
return new ListView(
children: <Widget>[
myForm(context, _formKey),
], …Run Code Online (Sandbox Code Playgroud)