1. 动态加载JS文件
第一种方法:
test.php
<script>tester();</script>
test6.php
header('Content-Type: application/x-javascript; charset=UTF-8');
$str = $_GET["str"];
?>
// javascript document
// by www.
alert('<?php echo $str; ?>');
function tester(string)
{
string ? alert(string) : alert('you call a function named tester');
}
?>
第二种方法:
test.php
function loadjs(url,callback){
var head = document.getElementsByTagName("head")[0];
var script = document.createElement('script');
script.onload = script.onreadystatechange = script.onerror = function (){
if (script && script.readyState && /^(?!(?:loaded|complete)$)/.test(script.readyState)) return;
script.onload = script.onreadystatechange = script.onerror = null;
script.src = '';
script.parentNode.removeChild(script);
script = null;
callback();
}
script.charset = "gb2312";
script.src = url;
try {
head.appendChild(script);
} catch (exp) {}
}
function loadmultijs(url,callback){
if(Object.prototype.toString.call(url)==='[object Array]'){ //是否数组
this.suc = 0; //加载计数
this.len = url.length; //数组长度
var a = this;
for(var i = 0;i < url.length;i++){
loadjs(url[i],function(){ a.suc++; if(a.suc == a.len) try{callback();}catch(e){} });
}
}
else if(typeof(url) == 'string') loadjs(url,callback);
}
loadjs("test5.php?return=value",function(){ alert(value); tester(value); });
</script>
test5.php
加载多JavaScript文件的实例:
'ajax.php?ajax=1',
'functions.js'
];
loadmultijs(url,function(){ alert("加载完毕。"); /* 这里可以调用动态加载的JS文件的数据或方法 */ });
2. 动态加载css文件
test.php
<style type="text/css" media="screen">@import "/blog_article/div/w/300/amp;h/400.html";</style>
<link rel="stylesheet" type="text/css" href="/blog_article/fonts/s/24/amp;c/red.html">
<body>
<div>
this document has a #e4e4e4 background, a 300px/400px div, and a arial/24px/red words.
</div>
</body>
div.php
// declare the output of the file as CSS
header('Content-type: text/css');
// include the script
//include('others.php');
$width = $_GET['w'];
$height = $_GET['h'];
?>
fonts.php
// declare the output of the file as CSS
header('Content-type: text/css');
// include the script
//include('others.php');
$size = $_GET['s'];
$color = $_GET['c'];
?>
body{font-family:arial;font-size:<?=$size?>px;color:<?=$color?>}
就是这些了,php动态加载js与css的方法就介绍完了,建议大家亲自动手测试下,看看具体的实现有没有问题。
1、__call的用法
PHP5 的对象新增了一个专用方法 __call(),这个方法用来监视一个对象中的其它方法。如果你试着调用一个对象中不存在的方法,__call 方法将会被自动调用。
例:__call
class foo {
function __call($name,$arguments) {
print("Did you call me? I'm $name!<br>");
print_r($arguments);
print("<br><br>");
}
function doSecond($arguments)
{
print("Right, $arguments!<br>");
}
}
$test = new foo();
$test->doFirst('no this function');
$test->doSecond('this function exist');
?>
__call 实现“过载”动作
这个特殊的方法可以被用来实现“过载(overloading)”的动作,这样你就可以检查你的参数并且通过调用一个私有的方法来传递参数。
例:使用 __call 实现“过载”动作
class Magic {
function __call($name,$arguments) {
if($name=='foo') {
if(is_int($arguments[0])) $this->foo_for_int($arguments[0]);
if(is_string($arguments[0])) $this->foo_for_string($arguments[0]);
}
}
private function foo_for_int($x) {
print("oh an int!");
}
//by www.
private function foo_for_string($x) {
print("oh a string!");
}
}
$test = new Magic();
$test->foo(3);
$test->foo("3");
?>
2、__set 和 __get的用法
这是一个很棒的方法,__set 和 __get 方法可以用来捕获一个对象中不存在的变量和方法。
例: __set 和 __get
class foo {
function __set($name,$val) {
print("Hello, you tried to put $val in $name<br>");
}
function __get($name) {
print("Hey you asked for $name<br>");
}
}
$test = new foo();
$test->__set('name','justcoding');
$test->__get('name');
?>
在php编程中,尤其是php面向对象编程中,灵活应用__call、__set 和 __get,可以收到意外的惊喜,建议大家牢固掌握。
比较字符串的相似度,可以使用cookies、IP限制等技术,还可以使用PHP自身带的similar_text函数来判断内容的相似度。
similar_text() 函数计算两个字符串的匹配字符的数目,也可以计算两个字符串的相似度(以百分比计)。
语法
similar_text(string1,string2,percent)
参数 描述
string1 必需。规定要比较的第一个字符串。
string2 必需。规定要比较的第二个字符串。
percent 可选。规定供存储百分比相似度的变量名。
例子:
//比较字符串相似度
similar_text("Web Design & Development","Low Cost, Custom Web Design",$percent);
echo "Percent: $percent%"; ;
?>
实际应用:
/**
* 内容相似度比较
* Edit www.
*/
$query = mysql_query()("select * from $table") or die("Query failed");
while ($row = mysql_fetch_array($query)) {
similar_text(strtoupper()($_POST['name']), strtoupper($row['reserved']), $similarity_pst);
if (number_format($similarity_pst, 0) > 90){
$too_similar = $row['reserved'];
print "The name you entered is too similar the reserved name "".$row['reserved'].""";
break;
}
}
?>