有人来吐槽吗?这样的代码能找到工作吗

echophp 发布于 2015/10/17 12:58
阅读 1K+
收藏 0
PHP
https://github.com/echophper/article
加载中
0
北上广深
北上广深

config.php可把宝宝吓坏了:

header("Content-type: text/html; charset=utf-8");
define("DSN", "mysql:dbname=info;host=127.0.0.1");
define("USERNAME", "root");
define("PASSWORD", "");

e
echophp
可以具体说说吗给点建议
e
echophp
欢迎吐槽出来→_→
0
Broly
Broly
建议去学习下PHP框架
Broly
Broly
回复 @echophp : 楼下说的跟我想说的差不多
e
echophp
可以留下你吐槽真言吗?肥肠感谢
0
Helloall
Helloall

刚刚看了你的代码,这一切都是良好的开始,相信自己。你可以学习一个PHP框架,如codeigniter,然后可以去找建设网站的公司边做边学。

框架的好处是mvc,你可以很容易的在后续对代码进行修改和更新。刚刚看你的代码耦合度太高的,而且没有很好的运用面向对象/面向切面编程的技术,如果需求变更,后续的修改可能会非常麻烦。而且现在一般都没有直接拼接数据库操作的,还有一点就是你好像没有很好的过滤一些get和post,这样会让恶意的用户实现注入攻击。

好好学习,要满怀激情的去热爱这一行,相信你会做出顶级大作。

Helloall
Helloall
回复 @echophp : 看一下就懂,你的数据库查询采用的是select * from ....的写法,但是现在很少直接这样写。大部分都使用框架提供的api来实现。看一下下面的codeigniter框架操作数据库的AR类,就懂了。 http://codeigniter.org.cn/userguide2/database/active_record.html#select
e
echophp
直接拼接数据库操作???这个不懂,求指教
e
echophp
满满的正能量,内牛满面了,无比感谢
0
no_user
no_user
通过这个代码看得出来你是个很务实的人,不过也让你看起来略显稚嫩,所以讲究软件工程技术的公司可能不会考虑你,追求效率的公司应该非常喜欢有这种编码风格的人。
e
echophp
非常感谢你的吐槽!!
0
leo108
leo108
学PHP一周的水平
e
echophp
吐槽的好,可以留下你的建议吗
0
滔哥
滔哥

建议:

按你目前的想法,坚持写下去。可以考虑将同一个项目多次重构。把代码按当前思路极致化,让重复代码少之又少。你会进步具大,然后就是看看别人的框架,掌握类及MVC之类的东西了!!!加油,其它还不错。我学PHP一个月还没你这水平咧!!!

阳光test
阳光test
涛哥这话很对,都是从新手开始的,最开始写的代码难免有缺陷,慢慢就好了。
e
echophp
非常感激你的建议,满满正能量的! 我写完回头一看就感觉好差的结构,一个字:乱! 没工作学得好累啊,这样的代码求职有难度啊
0
xinson
xinson
写的很清晰,对于入门来说,挺不错的啊!不过现在要加代码分层,加个smarty实现简单代码分层,实现简单的MVC。之后用MVC框架,来重写这些代码,例如,THINKPHP,CI 之类比较好入门的框架。找工作最好懂HTML+CSS,这样保障大。
0
南湖船老大
南湖船老大
变量命名还算规范,封装不够,你看你的分页都是重复来重复去,对面向对象的理解明显不够,还是建议你可以写个简单的mvc
0
wushuiyong
wushuiyong

好吧,看到楼上有提到CodeIgniter,我就插一句吧,当年我入门也是这个MVC,还自己写了一个类似的MVC:zan

虽然现在回头一看,代码很稚嫩,但它真的让你明白一个真正的MVC不只是controller、model、view这么简单。当然,得把基础组件写好,写精致,写健壮本身就需要花费一两年时间积累了。

更不要提现在主流的MVC,像yii2、laravel、symfony这些利用闭包特性的Ioc来实现类封装,具体可以看下我下的一篇关于yii2容器的分析,慢慢就算是一个中级PHPer了吧

0
eechen
eechen
前端控制器(路由)并不是实现MVC必需的设计模式.
MVC的核心思想是分离界面(View),逻辑(Controller),数据(Model).
比如下面就是一个MVC项目的代码结构:
前台:
/post.php?id=1024                        //页面控制器(处理输入,调用模型,整合数据,输出视图)
	/include/common.php                  //执行一些公共操作,加载公共库(承上启下).
		/config.php                      //全局配置
		/include/functions.php           //系统函数(模型,SQL增删改查,预处理参数化查询防止SQL注入)
		/themes/default/functions.php    //主题自定义函数
	/themes/default/post.php             //视图(htmlspecialchars/HTMLPurifier防止XSS)
		/themes/default/header.php       //公共头部(common.js)
		/themes/default/footer.php       //公共尾部
后台:
/admin/post.php?id=1024                        //页面控制器(处理输入,调用模型,整合数据,输出视图)
	/include/common_admin.php                  //执行一些公共操作,加载公共库(承上启下).
		/config.php                            //全局配置
		/include/functions.php                 //系统函数(模型,SQL增删改查,预处理参数化查询防止SQL注入)
		/admin/themes/default/functions.php    //后台主题自定义函数
	/admin/themes/default/post.php             //视图(htmlspecialchars/HTMLPurifier防止XSS)
		/admin/themes/default/header.php       //公共头部(common.js)
		/admin/themes/default/footer.php       //公共尾部
后台也提供主题功能,除了用来分离界面和逻辑实现MVC,还方便开发者修改和定制自己的后台.

又比如浏览器访问页面控制器,控制器处理输入,调用模型获取数据,载入视图输出数据.
/post.php?id=1024 //页面控制器(输入ID,输出文章)
<?php
if(!defined('APP_ROOT')) define('APP_ROOT', './'); //定义入口
require APP_ROOT.'include/common.php'; //加载模型(比如functions.php)
if(empty($_GET['id'])) exit();
$data = get_post(intval($_GET['id'])); //处理输入,调用模型获取数据
$view = render('post.php', $data);     //载入视图输出数据
//后续可以对视图内容进行自定义操作,比如生成静态文件,或者替换一些内容,然后输出:
echo $view;
//在控制器中获取视图需要的所有数据,并封装到$data数组中,传入视图.
//如果你想在视图里直接调用数据$data,可以把render函数改为require.
//这样视图跟控制器都在同一作用域,灵活性更强,但也要注意,尽量不要在视图里写具体逻辑.
//视图应该专注于调用并输出数据.
/include/functions.php里的render()函数:
function render($template, array $data = array()) {
	global $app;
	header('Content-Type: text/html;charset=utf-8');
	ob_end_clean();
	ob_start();
	//视图里可以直接调用functions.php函数,$data数组则需要传参
	require APP_ROOT.'themes/'.$app['theme'].'/'.$template;
	$view = ob_get_contents();
	ob_end_clean();
	ob_start();
	return $view;
}
config.php可以把常量放在关联数组里定义,比如:
/config.php
<?php
$app = array(
	'db_type'     => 'mysql',
	'db_host'     => '127.0.0.1',
	'db_username' => 'root',
	'db_password' => '',
	'db_name'     => 'mybase',
	'db_port'     => 3306,
	'db_socket'   => '',
	'db_pconnect' => false,
	'db_prefix'   => '',
	'db_conn'     => 'db_conn_obj',
	'base_url'    => 'http://www.example.com/',
	'html_cache'  => false,
	'theme'       => 'default',
	'theme_admin' => 'default'
);
如果不想在定义后被修改,那就用常量数组:
<?php
//PHP5:
define('APP', serialize(array()));
//用的时候需要反序列化
$app = unserialize(APP);
//PHP7:
define('APP', array());
不过使用变量数组可以按需动态生成全局的数据库连接对象(不需要使用单例模式):
<?php
// config.php
$app = array('db_conn' => 'db_conn_obj');
// functions.php
function cn_db(&$app) {
	$app['db_conn'] = @new mysqli('127.0.0.1', 'root', 'pass', 'mysql');
	register_shutdown_function(function() use ($app) { $app['db_conn']->close(); });
}
function cn_foo1() {
	global $app;
	if(!is_object($app['db_conn'])) cn_db($app);
	return $app['db_conn']->query('select user,host from user where user = \'root\'')->fetch_all();
}
function cn_foo2() {
	global $app;
	if(!is_object($app['db_conn'])) cn_db($app);
	return $app['db_conn']->query('select user,host from user')->fetch_all();
}
// controller
print_r(cn_foo1());
print_r(cn_foo2());
返回顶部
顶部