本文目录一览:
PHP多态代码实例
这篇文章主要介绍了PHP多态代码实例,本文用2个代码实例来演示PHP中的多态,需要的朋友可以参考下。
多态定义:只关心一个接口或者基类,而不关心一个对象的具体类。(同一类型,不同结果)
这里两个例子:
第一个,我们发现,基类定义了标准,子类进行了自我规则的实现。这是多态的一个要求。同时,这是满足重写;实际上这是不同类的不同表现;没有严格满足一个接口,或者基类编程。因为你调用的时候不是
$stu->showGrade()
而是各自自己的方法;
class stu {
public function showGrade() {
echo "base class";
}
}
class xiaomin extends stu {
public function showGrade() {
echo "is son show 80";
}
}
class xiaoli extends stu {
public function showGrade() {
echo "is son show 60";
}
}
function doit($obj) {
if (get_class($obj) != "stu") {
$obj->showGrade();
}
}
doit(new xiaoli());
doit(new xiaomin());
第二个例子:dovoice
参数规定了 $obj
为 animal
,意识就是用接口接受了实现类对象,进行了向上转型。这就符合同一类型,不同结果了,这就是多态;
实际上在 Java 中会是 animal a = new dog();
这样子的;因为 PHP 是弱类型语言,没有对象转型机制。
interface animal {
public function voice();
}
class cat implements animal {
public function voice() {
echo "miao~~~<br>";
}
}
class dog implements animal {
public function voice() {
echo "wang~~~<br>";
}
}
function dovoice(animal $obj) {
$obj->voice();
}
dovoice(new dog());
dovoice(new cat());
几种常用PHP连接数据库的代码示例
PHP连接MySQL数据库代码
<?php
$mysql_server_name = 'localhost'; // 改成自己的mysql数据库服务器
$mysql_username = 'root'; // 改成自己的mysql数据库用户名
$mysql_password = '12345678'; // 改成自己的mysql数据库密码
$mysql_database = 'mycounter'; // 改成自己的mysql数据库名
$conn = mysql_connect($mysql_server_name, $mysql_username, $mysql_password);
mysql_query("CREATE DATABASE mycounter DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;", $conn);
mysql_select_db($mysql_database, $conn);
$sql = "CREATE TABLE `counter` (`id` INT(255) UNSIGNED NOT NULL AUTO_INCREMENT, `count` INT(255) UNSIGNED NOT NULL DEFAULT 0, PRIMARY KEY (`id`)) TYPE = INNODB;";
$result = mysql_query($sql, $conn);
mysql_close($conn);
echo "Hello!数据库mycounter已经成功建立!";
?>
PHP连接Access数据库代码方法
<?php
$conn = new com("ADODB.Connection");
$connstr = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" . realpath("data/db.mdb");
$conn->Open($connstr);
$rs = new com("ADODB.RecordSet");
$rs->Open("select * from szd_t", $conn, 1, 1);
while (!$rs->eof) {
$f = $rs->Fields(1);
echo $f->value;
$rs->MoveNext();
}
?>
高质量PHP代码的50个技巧(3)
/**
* Method to execute a command in the terminal
* Uses :
* 1. system
* 2. passthru
* 3. exec
* 4. shell_exec
*/
function terminal($command)
{
// system
if (function_exists('system')) {
ob_start();
system($command, $return_var);
$output = ob_get_contents();
ob_end_clean();
}
// passthru
else if (function_exists('passthru')) {
ob_start();
passthru($command, $return_var);
$output = ob_get_contents();
ob_end_clean();
}
// exec
else if (function_exists('exec')) {
exec($command, $output, $return_var);
$output = implode("\n", $output);
}
// shell_exec
else if (function_exists('shell_exec')) {
$output = shell_exec($command);
}
else {
$output = 'Command execution not possible on this system';
$return_var = 1;
}
return array('output' => $output, 'status' => $return_var);
}
terminal('ls');
上面的函数将运行shell命令,只要有一个系统函数可用,这保持了代码的一致性。
灵活编写函数
function add_to_cart($item_id, $qty)
{
$_SESSION['cart']['item_id'] = $qty;
}
add_to_cart('IPHONE3', 2);
使用上面的函数添加单个项目。而当添加项列表的时候,你要创建另一个函数吗?不用,只要稍加留意不同类型的参数,就会更灵活。如:
function add_to_cart($item_id, $qty)
{
if (!is_array($item_id)) {
$_SESSION['cart'][$item_id] = $qty;
} else {
foreach ($item_id as $i_id => $qty) {
$_SESSION['cart'][$i_id] = $qty;
}
}
}
add_to_cart('IPHONE3', 2);
add_to_cart(array('IPHONE3' => 2, 'IPAD' => 5));
现在,同个函数可以处理不同类型的输入参数了。可以参照上面的例子重构你的多处代码,使其更智能。
有意忽略PHP关闭标签
我很想知道为什么这么多关于PHP建议的博客文章都没提到这点。
<?php
echo "Hello";
// Now don't close this tag
这将节约你很多时间。我们举个例子:
一个 super_class.php
文件
<?php
class super_class
{
function super_function()
{
// super code
}
}
?>
// super extra character after the closing tag
index.php
<?php
require_once('super_class.php');
// echo an image or pdf, or set the cookies or session data
这样,你将会得到一个 Headers already send error
。为什么?因为 “super extra character” 已经被输出了。现在你得开始调试啦。这会花费大量时间寻找 super extra
的位置。因此,养成省略关闭符的习惯:
<?php
class super_class
{
function super_function()
{
// super code
}
}
// No closing tag
这会更好。
在某地方收集所有输入,一次输出给浏览器
这称为输出缓冲,假如说你已在不同的函数输出内容:
function print_header()
{
echo "<p id='header'>Site Log and Login links</p>";
}
function print_footer()
{
echo "<p id='footer'>Site was made by me</p>";
}
print_header();
for ($i = 0; $i < 100; $i++) {
echo "I is : $i <br>";
}
print_footer();
替代方案,在某地方集中收集输出。你可以存储在函数的局部变量中,也可以使用 ob_start
和 ob_end_clean
。如下:
function print_header()
{
$o = "<p id='header'>Site Log and Login links</p>";
return $o;
}
function print_footer()
{
$o = "<p id='footer'>Site was made by me</p>";
return $o;
}
echo print_header();
for ($i = 0; $i < 100; $i++) {
echo "I is : $i <br>";
}
echo print_footer();
为什么需要输出缓冲:
可以在发送给浏览器前更改输出。如 str_replace
函数或可能是 preg_replace
或添加些监控/调试的HTML内容。
输出给浏览器的同时又做PHP的处理很糟糕。你应该看到过有些站点的侧边栏或中间出现错误信息。知道为什么会发生吗?因为处理和输出混合了。
发送正确的MIME类型头信息,如果输出非HTML内容的话
输出一些XML:
$xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>";
$xml .= "<response><code>0</code></response>";
// Send xml data
echo $xml;
工作得不错。但需要一些改进。
$xml = "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?>";
$xml .= "<response><code>0</code></response>";
header("Content-Type: application/xml");
echo $xml;
php最经典,最基础的代码,适合入门的
PHP是一种可以嵌入到HTML中的运行在服务器端的脚本语言,所以为了体现PHP的特性我们可以分两种模式来实现PHP代码。
1. PHP嵌入到HTML中,例如 index.php
<html>
<head></head>
<body>
<!-- 因为PHP嵌入到HTML中,所以需要完全区分PHP代码和HTML代码 -->
<?php
// 输出hello world
echo 'hello world';
?>
</body>
</html>
2. PHP独立文件,只有PHP代码,例如 index.php
<?php
// 输出
echo 'hello world';
// 不需要闭合标签