【问题标题】:PHP: Changing atributes through included functionPHP:通过包含函数更改属性
【发布时间】:2011-09-17 00:10:13
【问题描述】:

我对类和函数很陌生,所以我正在使用一个嵌入 Youtube 视频和本地 swf 的简单脚本。它工作正常,但我无法更改 swf 中的 $width 和 $height 属性。如果我在函数内创建它们,我必须将值设置为“0”,因此不会被外部值更新。它将保持为 0。

有两个文件:

classMedia.php

<?php
/*Gabriel*/
class Media {

    public function embedYT($code){
        echo "<iframe width='560' height='349' src='http://www.youtube.com/embed/".$code." ' frameborder='0' allowfullscreen></iframe>";
        }

        public function embedSWF ($swf){
        $width='0';
        $height='0';
    echo "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0' ID=objects WIDTH=460 HEIGHT=80> 
<PARAM NAME=movie VALUE=".$swf." '> 
<EMBED src=".$swf." ' WIDTH=".$width." HEIGHT=".$height." TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'> 
</OBJECT>";
    } }
    ?>

还有输出 演示.php

<?php include "classMedia.php"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>

<?php 
$media = new Media();
 $code = "XSGBVzeBUbk";
$media-> embedYT($code);
?>

<?php 
$media = new Media();
 $swf = "test.swf";
 $height = "360";
 $width = "480";
$media-> embedSWF($swf);
?>

</body>
</html>

【问题讨论】:

    标签: php class function flash embed


    【解决方案1】:

    如果 $height$width 仅与 embedSWF() 方法相关(我怀疑这是因为它看起来不像维度与 Media 相关联实例但是到embedSWF() 方法调用),您应该将它们与$swf 参数一起添加:

    public function embedSWF ($swf, $width = 0, $height = 0) {
        echo "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0' ID=objects WIDTH=460 HEIGHT=80><PARAM NAME=movie VALUE=".$swf." '><EMBED src=".$swf." ' WIDTH=".$width." HEIGHT=".$height." TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'></OBJECT>";
    }
    

    这样称呼:

    <?php 
    $media = new Media();
     $swf = "test.swf";
    $media-> embedSWF($swf, 480, 360);
    ?>
    

    编辑
    一般来说,当属性表达或与当前实例(对象)的状态相关时,您应该向类添加属性。。例如,

    public class Media {
        private $swf;
        private $height;
        private $width;
    
        public __construct($swf, $height, $width) {
            $this->swf = $swf;
            $this->height = $height;
            $this->width = $width;
        }
    
        public getEmbedCode() {
            // ...
        }
    
        public getIframeCode() {
            // ...
        }
    }
    

    在上面,Media 实例有一个 state(一个带维度的 SWF),它可以以不同的格式输出。即,该方法将内部状态转换为输出。

    或者,我们有一个没有状态的“类实用程序”类。相反,它拥有一组专门处理传递的数据(参数)的方法。例如,

    public class Media {
        public embedSWF($swf, $height, $width) {
            // ...
        }
    
        public embedYT($code) {
            // ...
        }
    }
    

    【讨论】:

      【解决方案2】:

      更改您的embedSWF 函数,为其添加两个参数,分别为$width$height,如下所示:

      public function embedSWF ($swf, $width = '0', $height = '0'){
          echo "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0' ID=objects WIDTH=460 HEIGHT=80> 
                  <PARAM NAME=movie VALUE=".$swf." '> 
                  <EMBED src=".$swf." ' WIDTH=".$width." HEIGHT=".$height." TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash'> 
              </OBJECT>";
      }
      

      然后,这样称呼它:

      <?php 
      $media = new Media();
       $swf = "test.swf";
       $height = "360";
       $width = "480";
      $media-> embedSWF($swf, $width, $height);
      ?>
      

      【讨论】:

        【解决方案3】:

        你需要像这样将宽度和高度作为参数传递给你的函数

        $height = "360";
        $width = "480";
        $media-> embedSWF($swf, width, height);
        

        然后改变你的函数看起来像这样

        public function embedSWF ($swf, width, height)

        并删除您在函数中启动的宽度和高度。

        您的宽度和高度目前超出了对象范围。

        【讨论】:

        • 用这个方法,他应该总是传递widthheight参数。除了你的widthheight 应该分别是$width$height
        【解决方案4】:

        $width$height 更改为对象属性,如下所示:

        <?php
        /*Gabriel*/
        class Media {
            public $width  = 0;
            public $height = 0;
        
            public function embedYT($code){
                echo "<iframe width='560' height='349' src='http://www.youtube.com/embed/".$code." ' frameborder='0' allowfullscreen></iframe>";
            }
        
            public function embedSWF ($swf){
                echo "<OBJECT classid='clsid:D27CDB6E-AE6D-11cf-96B8-444553540000' codebase='http://active.macromedia.com/flash2/cabs/swflash.cab#version=4,0,0,0' ID=objects WIDTH=460 HEIGHT=80> 
        <PARAM NAME=movie VALUE=".$swf." '> 
        <EMBED src=".$swf." ' WIDTH=".$this->width." HEIGHT=".$this->height."     TYPE='application/x-shockwave-flash' PLUGINSPAGE='http://www.macromedia.com/shockwave    /download/index.cgi?P1_Prod_Version=ShockwaveFlash'> 
        </OBJECT>";
            }
        }
        ?>
        

        用法:

        <?php 
            $media = new Media();
            $code = "XSGBVzeBUbk";
            $media-> embedYT($code);
        ?>
        
        <?php 
            $media = new Media();
            $swf = "test.swf";
            $media->height = 360;
            $media->width = 480;
            $media-> embedSWF($swf);
        ?>
        

        【讨论】:

        • 当然这仍然行不通,因为宽度和高度仍未以任何方式传递给对象,您示例中的宽度和高度仍将为 0。-您的更新修复了我的评论:P
        • 我添加了使用示例。当您设置$media-&gt;height = 360; 时,高度将传递给对象。
        猜你喜欢
        • 2015-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-22
        • 1970-01-01
        相关资源
        最近更新 更多