スポンサーリンク

このドキュメントの内容は、以下の通りです。

はじめに


CodeGen_PECL を利用して、クラスを実装してみます。

  • [2013-02-17-1] PHP extensionの作り方 5分でできるHello world!
  • [2013-02-18-1] PHP extensionの作り方 CodeGen_PECLを使ってC++で作る方法
  • [2013-02-19-1] PHP extensionの作り方 配列を返す方法
  • [2013-02-20-1] PHP extensionの作り方 配列の配列を返す方法

CodeGen_PECLのインストール


sudo pear install --alldeps CodeGen_PECL

XMLの準備


pecl-gen コマンドでソースコード類を生成します。pecl-genコマンドには、specファイルが必要です。

ファイル helloworld.xml


整数型のメンバ変数へのアクセスは、 PROP_GET_LONG/PROP_SET_LONG を利用します。
PROP_GET 系のマクロは、 /usr/local/share/pear/CodeGen/PECL/Extension.php に定義されています。

<?xml version="1.0" encoding="UTF-8"?>
<extension name="helloworld" version="1.0.0">
  <summary>Hello, World!</summary>
  <description><?data
This is my first PHP extension module.
  ?></description>

  <maintainers>
    <maintainer>
      <user>kaoru</user>
      <name>kaoru</name>
      <email>kaoru@foo.com</email>
      <role>lead</role>
    </maintainer>
  </maintainers>

  <license>PHP</license>

  <channel>__uri</channel>

  <release>
    <version>1.0.0</version>
    <date>2013-02-16</date>
    <state>stable</state>
    <notes><?data
- Initial release.
    ?></notes>
  </release>

  <class name="MyClass">
	  <property name="x" access="public" type="int" value="0" />

	  <function name="__construct">
		  <proto>void __construct([int _x = 345])</proto>
		  <code>php_printf("Constructor: %d", PROP_GET_LONG(x) );
			  PROP_SET_LONG(x, _x);
		  </code>
	  </function>
	  <function name="foo">
		  <proto>int foo()</proto>
		  <code>RETURN_LONG( PROP_GET_LONG(x) );</code>
	  </function>
  </class>
</extension>

スケルトンの生成


pecl-gen helloworld.xml

ビルド


cd helloworld
phpize
./configure
gmake

実行


php -d "extension=`pwd`/modules/helloworld.so" ./hello_class.php

** テスト用コード
<?php
$x = new MyClass();
echo $x->foo();
?>

スポンサーリンク
スポンサーリンク
 
いつもシェア、ありがとうございます!


もっと情報を探しませんか?

関連記事

最近の記事

人気のページ

スポンサーリンク
 

過去ログ

2020 : 01 02 03 04 05 06 07 08 09 10 11 12
2019 : 01 02 03 04 05 06 07 08 09 10 11 12
2018 : 01 02 03 04 05 06 07 08 09 10 11 12
2017 : 01 02 03 04 05 06 07 08 09 10 11 12
2016 : 01 02 03 04 05 06 07 08 09 10 11 12
2015 : 01 02 03 04 05 06 07 08 09 10 11 12
2014 : 01 02 03 04 05 06 07 08 09 10 11 12
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
2003 : 01 02 03 04 05 06 07 08 09 10 11 12

サイト

Vim入門

C言語入門

C++入門

JavaScript/Node.js入門

Python入門

FreeBSD入門

Ubuntu入門

セキュリティ入門

パソコン自作入門

ブログ

トップ


プライバシーポリシー