在你认为这是一个重复的问题之前,我相信我有一个独特的,即使它有点愚蠢的情况.
几天前,我将我的Ubuntu 10.04服务器上的MySQL版本升级到5.3.3(它超过了10.04的Ubuntu版本).今天,我尝试登录phpMyAdmin,发现了一些有些可怕的Connection for controluser as defined in your configuration failed错误.
在按照几个关于如何解决这个问题的SO问题的描述之后,我已经陷入困境.
flush privileges).granting access to database phpmyadmin for phpmyadmin@localhost: already exists
所以,这就是我留下的东西.我有一笔不能修改的补助金,也没有撤销:
mysql> show grants for 'phpmyadmin'@'localhost';
+-------------------------------------------------------------------------------------------------------------------+
| Grants for phpmyadmin@localhost |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'phpmyadmin'@'localhost' IDENTIFIED BY PASSWORD '*46CFC7938B60837F46B610A2D10C248874555C14' |
| GRANT ALL PRIVILEGES ON `phpmyadmin`.* TO 'phpmyadmin'@'localhost' |
+-------------------------------------------------------------------------------------------------------------------+
2 rows in …Run Code Online (Sandbox Code Playgroud) 在大多数框架中,您具有表示数据库中的行的模型类.
例如php代码:
class User extends Model {}
Run Code Online (Sandbox Code Playgroud)
我正在给Laravel雄辩的例子,但对大多数php框架来说都是如此.
然后在类中添加关系:
public function pictures()
{
return $this->hasMany('App\Picture');
}
Run Code Online (Sandbox Code Playgroud)
然后你添加一些像这样的方法:
public function deleteComments()
{
// delete comments code here
}
Run Code Online (Sandbox Code Playgroud)
我的第一个问题是:这是一个好的设计架构,因为在项目变大之后,你会有很多关系(图片,评论,帖子,订阅等等与用户相关联).这个类可能会变成10k行代码.
在这种情况下,课程将变得非常庞大且难以维护.也可能违反了单一责任原则,因为你在一个班级中有太多的方法.
此外,如果我想在另一个应用程序中使用它,我不能,因为我将不得不在第二个应用程序(网站)中提取图片,评论等.
如果我创建其他类" UserPictures"," UserPictureDeleter"代码会变得更复杂.
这是一个好的做法,如果没有,你有什么建议,如何使代码不会膨胀这么多的方法,但易于使用.你是否同意所有这些方法属于User同类?
引用自:https://en.wikipedia.org/wiki/Law_of_Demeter
更正式地说,函数的Demeter法则要求对象O的方法m只能调用以下类型的对象的方法:[2]
O本身
m的参数
在m中创建/实例化的任何对象
O的直接组件对象
一个全局变量,可由O访问,范围为m
特别是,对象应该避免调用另一个方法返回的成员对象的方法
所以详细说明:
class O
{
private $c;
public function m($obj1)
{
$this->a(); // OK
$obj1->a(); // OK
(new C())->a(); // OK
$c->a(); // OK
$a = function() { };
$a(); // OK
}
private function a() {}
}
Run Code Online (Sandbox Code Playgroud)
现在第3条法律值得怀疑.所以我新创建了一个对象.但如果我而不是:
(new C())->a();
Run Code Online (Sandbox Code Playgroud)
我做:
$this->factory->createC()->a();
Run Code Online (Sandbox Code Playgroud)
它还有效吗?一个普通的课程被实例化,只是new一个工厂而已.但是嘿!该法律说:
特别是,对象应该避免调用另一个方法返回的成员对象的方法
按此规则,工厂方法失败!怎么办?它真的失败了吗?
我想根据列表检查 URL 以做出有关处理的选择(这将查看数据流,而不是作为应用程序中的路由器)但是 HTTP 使得以多种不同方式表示相同的URL变得非常容易,例如(改编自RFC 2616):
http://example.com/~smith/home.html
http://example.com:80/~smith/home.html
http://EXAMPLE.com/%7Esmith/home.html
http://EXAMPLE.COM/%7esmith/home.html
Run Code Online (Sandbox Code Playgroud)
都代表相同的目标资源。
我希望能够将 URL 转换为规范形式...
有没有一种简单的方法可以始终如一地做到这一点?
(似乎这些parse_url()都没有。)
两个zip文件和两个图像位于https://example.com/directory中.(由于index.php文件在此目录中可用,我们不知道这些文件的文件名).
有没有办法使用PHP或Linux命令查找上述四个文件的名称?